附加GDB调试器和记录回溯

时间:2017-10-15 16:09:01

标签: linux gdb

我一直在努力调试我的应用程序几天。我想要做的是将GDB附加到正在运行的进程(使用批处理静默),但如果发生崩溃,则记录回溯到文本文件。我可以毫无问题地附加调试器(gdb attach pid)。但是无法与静默运行的日志一起实现日志记录。

提前致谢。

2 个答案:

答案 0 :(得分:1)

  

但未能

你有什么尝试?例如:

cat t.c
int main() { sleep(5); printf("Aborting\n"); abort(); }

gcc -w -g t.c && ./a.out &
sleep 0.1 && rm -f gdb.txt &&
gdb -q --batch-silent -p "$(pgrep a.out)" -ex 'set logging on' \
   -ex continue -ex where -ex quit &&
cat gdb.txt

这会产生:

[1] 38218       # bash reports background process
Aborting        # process done sleeping

                # contents of gdb.txt:
Program received signal SIGABRT, Aborted.
#0  0x00007f99aeb50c37 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007f99aeb54028 in __GI_abort () at abort.c:89
#2  0x00000000004005df in main () at t.c:1

                # bash reports process termination:
$ -bash: line 98: 38225 Aborted                 (core dumped) ./a.out    
[1]+  Exit 134                gcc -w -g t.c && ./a.out

答案 1 :(得分:0)

您确定需要附加到正在运行的进程吗?

如果您的目标是修复崩溃,则可以在发生崩溃后启用核心转储并调试核心转储。与调试实时进程相比,调试核心转储有一些限制,但在您的情况下(仅查看回溯),它看起来更合适。要调试核心转储运行:

gdb /path/to/binary /path/to/core