gpt4 book ai didi

c - 使用 GDB 查找信号处理函数?

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:22 29 4
gpt4 key购买 nike

我正在处理一个包含大量文件的 C 项目。现在我想找到信号处理函数,但是在浏览项目树时没有成功。

我想到解决这个问题的第一种方法是使用 GDB 运行二进制文件。

有没有一种方法可以让 GDB 在收到信号(例如 Ctrl-C)时立即中断?

最佳答案

这里有一些引用:

http://nirbhay.in/2012/09/debug-signal-handlers-using-gdb/

让我们用这个程序做一些实验:

/*
@file : sig.c
*/

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void signalhandler(int signum) {
printf("\n SIGINT caught : %d", signum);
}

int main() {
signal(SIGINT, signalhandler);

while (1) {
printf("\n looping : inside main()");
sleep(1);
}
}

在这种情况下,您可以这样做:

(gdb) handle SIGINT stop pass

之后,您继续前进以获取信号处理函数。我得到了:

$ gdb ./a

...

(gdb) handle SIGINT stop pass
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) y
Signal Stop Print Pass to program Description
SIGINT Yes Yes Yes Interrupt
(gdb) r
Starting program: /home/arc/a

looping : inside main()
looping : inside main()
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7aef900 in __nanosleep_nocancel () from /usr/lib/libc.so.6
(gdb) s
Single stepping until exit from function __nanosleep_nocancel,
which has no line number information.
0x0000000000400596 in signalhandler(int) ()

关于c - 使用 GDB 查找信号处理函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33890418/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com