过滤 gdb 的回溯以仅显示我的项目文件

Filtering gdb's backtrace to only display my project's files

当发生段错误时,我想找出我项目中哪里出错了。为此,我 运行 gdb 生成一个回溯,我将其记录到一个文件中,然后 运行 通过几个 sed 命令删除引用源文件或库的行不在我的项目中。例如,我对这样的行不感兴趣:

#2  0x00007ffff78bfb3d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6

现在,我只是在每次出现新案例时添加过滤规则(例如,以上内容与 "from /usr/lib/" 匹配)。但是不知道有没有更好的办法

在我查看的情况下,似乎我的文件在输出中只有不以 /../ 开头的文件。但是我只用这个怕误报

没有正则表达式那么脆弱的解决方案也很好。

您可以使用 gdb Python 脚本功能在 Python 中编写自己的 bt 变体。如果你四处搜索,你应该能够找到一个这样写的。然后,你可以修改这个 bt 做任何你喜欢的事情;在这种情况下,我会建议基于框架的白名单 "objfile"(可执行文件或共享库的 gdb 术语)。