这部分开始于为什么 gdb 不喜欢别名
现在我提出以下论点——
gdb firefox-esr
(gdb) set logging file my-firefox-esr-1802018.log
(gdb) set pagination 0
(gdb) show logging
Future logs will be written to firefox-esr-020818.log.
Logs will be appended to the log file.
Output will be logged and displayed.
(gdb) run --safe-mode
当它崩溃时我做了-
(gdb) bt
(gdb) thread apply all bt
当它完成显示所有线程和其中的输出时,我将
(gdb) quit
但现在当我在 /home/shirish 时,我看不到该日志文件。我应该给出整个路径吗?
答案1
set logging file
默认情况下, in指令gdb
将写入当前目录。
firefox-esr
因此,在您的示例中,如果所使用的用户对该目录具有写入权限,则日志文件将被写入所在目录。
所以答案是肯定的,要将日志文件写入您的主目录,您必须提供完整路径set logging file
。
看 gdb 回溯到文件一个有趣的技巧来完成你的操作:
别名 bt='echo 0 | gdb -batch-silent -ex“运行”-ex“设置日志覆盖”-ex“设置日志文件gdb.bt”-ex“设置日志记录”-ex“设置分页关闭”-ex“处理SIG33传递nostop noprint " -ex "echo backtrace:\n" -ex "backtrace full" -ex "echo \n\nregisters:\n" -ex "info registers" -ex "echo \n\n当前指令:\n" -ex " x/16i \$pc" -ex "echo \n\n线程回溯:\n" -ex "线程应用所有回溯" -ex "设置注销" -ex "退出" --args'
bt $crashing_application
也可以看看使用 Gentoo 进行回溯
答案2
gdb 不会始终在 pwd 中创建 gdb.txt 或自定义日志文件文件。必须通过在 gdb 终端中执行命令“setloggingon”来显式指定它。只有这样输出才会被记录。