c++ - 使用 gdb 调试附加进程 - 如何跳出循环

标签 c++ c debugging gdb

我正在调试看起来像这样的代码:

while (true){
   // do something ...
   size_t i = foo();  // <- bp set here
   if (flag_set) break;
}

// More code follows here ...

我想在 foo() 函数调用处中断,调用它几次,然后完全跳出 while 循环(假设我们保证标志将被设置 - 这样我们就可以跳出循环。

如何完全跳出循环? finish 简单地运行到下一次迭代。我想要做的是退出当前的“代码块”(在本例中为 while 循环)

最佳答案

您需要 advance 命令,它采用与 break 命令相同的参数。以您的代码为例(但添加了行号):

10 while (true){
11   // do something ...
12   size_t i = foo();  // <- bp set here
13   if (flag_set) break;
14 }
15 
16 // More code follows here ...
17 someFunction();

假设您在第 12 行的原始断点是断点 1,并且在断了几次之后您想跳到第 17 行,您可以键入如下内容:

禁用 1

前进 17

这将禁用断点 1(因此它不会在循环的其余部分被命中)然后继续执行程序直到它命中第 17 行。

关于c++ - 使用 gdb 调试附加进程 - 如何跳出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205012/

相关文章:

c - 如何防止缓冲区溢出将 double 转换为 char?

c++ - 使用 *this 时的段错误

c# - 非常奇怪 - 当我使用断点时,代码(随机)的工作方式不同

c++ - 在 istream 错误上添加 Null 终止符

c++ - 我应该采取什么方法将 ascii 字符转换为 C++ 中的其他字符

c++ - 低版本gcc使用的静态库

java - 无法运行程序 CreateProcess error=206,文件名或扩展名太长

c++ - 返回(大)对象时复制开销?

c++ - 如何定义可变参数类模板的成员模板函数

c++ - int16_t 到 float 转换怪异