小编Sha*_*off的帖子

调试Linux内核预解压缩阶段

我试图在解压缩之前使用GDB来调试Linux内核zImage.内核在ARM目标上运行,我有一个JTAG调试器与GDB服务器存根连接.目标必须加载引导加载程序.引导加载程序从闪存中读取内核映像并将其放入RAM中0x20008000,然后分支到该位置.

我已经启动了GDB并连接到远程目标,然后我使用GDB的add-symbol-file命令:

add-symbol-file arch/arm/boot/compressed/vmlinux 0x20008000 -readnow
Run Code Online (Sandbox Code Playgroud)

当我为该地址设置断点时,它会陷入正确的位置 - 当它分支到内核时.但是,GDB显示了错误的来源arch/arm/boot/compressed/head.S.它落后了4条线.我怎样才能解决这个问题?

我也尝试添加-s section addr选项add-symbol-file-s .start 0x20008000; 这导致完全相同的问题.

embedded gdb arm linux-kernel

5
推荐指数
1
解决办法
1517
查看次数

而循环永远不会结束

我正在使用bash,我正在尝试做这样的事情:

A=1
while [ $A=1 ]; do
    read line
    echo $line | grep test >/dev/null   
    A=$?
    echo $A
done 
Run Code Online (Sandbox Code Playgroud)

即使grep成功完成并且A设置为0,此脚本也永远不会结束.我在这里缺少什么?以下是输出示例.

$ ./test.sh
Run Code Online (Sandbox Code Playgroud)

asdf

1
Run Code Online (Sandbox Code Playgroud)

test

0
Run Code Online (Sandbox Code Playgroud)

hm...

1
Run Code Online (Sandbox Code Playgroud)

bash shell loops while-loop

4
推荐指数
2
解决办法
3950
查看次数

为什么信号不会被抓住?

在我的main()的最开始,我有:

signal(SIGTERM, SIGTERM_handler);
Run Code Online (Sandbox Code Playgroud)

SIGTERM_handler是:

void SIGTERM_handler(int signum) {

    NSLog(@"Caught signal: [%d]. Cleaning up ...",signum);
    //cleanup();
    NSLog(@"Done cleaning up. Exiting ...");
    exit(EXIT_FAILURE);
}
Run Code Online (Sandbox Code Playgroud)

这些线从未打印过.当我在处理程序中设置断点时,它们永远不会被击中.我不打电话到sigaction()任何地方.GDB设置为通过我关心的信号(handle SIGTERM SIGINT pass stop print或者handle SIGTERM SIGINT pass nostop print).甚至默认的信号处理程序也不起作用 - 向程序发送SIGINT(我没有指定处理程序)也没有做任何事情.

可能是什么导致了这个?

unix macos posix signals objective-c

4
推荐指数
1
解决办法
1669
查看次数

gen_server:调用导致服务器与noproc崩溃

我有一个简单的服务器(下面).我可以创建服务器,cell_tracer:start_link()这是有效的; 我知道这个,因为当我重复同一个电话时,我收到一个already_started错误.问题是在创建服务器之后,使用cell_tracker:get_cells()(或执行任何操作gen_server:call(...))导致服务器退出时出现如下异常:

** exception exit: {noproc,{gen_server,call,[cell_tracker,get_cells]}}
     in function  gen_server:call/2 (gen_server.erl, line 180)
Run Code Online (Sandbox Code Playgroud)

我可以handle_call(get_cells...)直接打电话,我得到了预期的结果.

我不确定这里发生了什么.它没有给我很多信息,我没有看到问题.我该如何进一步深入研究?

-module(cell_tracker).
-behavior(gen_server).
-export([start_link/0, stop/0]).
-export([add_cell/1, del_cell/1, get_cells/0]).
-export([init/1,
         handle_cast/2,
         handle_call/3,
         terminate/2,
         handle_info/2,
         code_change/3]).

%% operational api
start_link() ->
  gen_server:start_link({global, ?MODULE}, ?MODULE, [], []).

stop() ->
  gen_server:cast(?MODULE, stop).

%% traking api

add_cell(Cell) ->
  gen_server:call(?MODULE, { add_cell, Cell }).

del_cell(Cell) ->
  gen_server:call(?MODULE, { del_cell, Cell }).

get_cells() ->
  gen_server:call(?MODULE, get_cells).

%% gen_server callbacks

init(Coords) ->
  {ok, Coords}.

handle_cast(stop, …
Run Code Online (Sandbox Code Playgroud)

erlang erlang-otp

3
推荐指数
1
解决办法
4618
查看次数