GDB C++ 如何停止侵入标准库

Sil*_*ash 4 c++ gdb

这篇文章简要讨论了我面临的同样的问题。本质上,gdb 是否有默认设置或 hack 来停止步进到每个 glib 库中,而只步进到用户文件中?我知道每次它进入其中时我都可以调用finish,但我宁愿避免一些浪费的按键。

它已经很烦人了,因为它要处理 g++ 的输出。如果这种暴露狂无法阻止,那么这些 GNU 工具有没有好的替代品呢?我确实听说过有关 Eclipse 的好消息,但我只是一个寻求以最小的努力进行快速而肮脏的修复的学生。

Fan*_*Fox 6

如果您有 GDB 7.12.1 或更高版本,您可以将以下内容添加到您的~/.gdbinit文件中:

skip -gfi /usr/include/c++/*/*/*
skip -gfi /usr/include/c++/*/*
skip -gfi /usr/include/c++/*
Run Code Online (Sandbox Code Playgroud)

仔细检查这些库是否确实是这些库的正确位置。这个答案来自这里

一些无需编辑 gdb init 的选项

如果您想“跨过”一条线(例如std::vector<int> a;)而不单步进入它,您可以使用next

如果您遇到类似情况int b = is_negative(a[0])并且想要停下来,is_negative您有以下几种选择:

  1. 单步进入该a[0]函数,然后使用finish再次单步退出。
  2. 用于tbreak is_negative在函数上创建临时断点is_negative,然后使用next将在断点处中断的单步执行。

如果函数中有许多子调用,则 2 会更快:

is_negative(a[b.at(2)] * c[3]);
Run Code Online (Sandbox Code Playgroud)