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

GDB C++ How to Stop Stepping Inside Standard Libraries

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

处理 g++ 的输出已经很烦人了。如果无法阻止这种暴露狂,那么这些 gnu 工具是否有好的替代品?我确实听说过关于 eclipse 的好消息,但我只是一个学生,正在寻找以最少的努力进行快速而肮脏的修复。

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

skip -gfi /usr/include/c++/*/*/*
skip -gfi /usr/include/c++/*/*
skip -gfi /usr/include/c++/*

仔细检查这些库实际上是正确的位置。本回答来自here.

一些选项无需编辑 gdb init

如果你想"step over"一行(如std::vector<int> a;)而不进入它,你可以使用next

如果您遇到类似 int b = is_negative(a[0]) 的情况并且想在 is_negative 停止,您有几个选择:

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

2 在函数中有许多子调用的情况下更快:

is_negative(a[b.at(2)] * c[3]);