Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用gdb调试附加进程-如何从循环中退出_C++_C_Debugging_Gdb - Fatal编程技术网

C++ 使用gdb调试附加进程-如何从循环中退出

C++ 使用gdb调试附加进程-如何从循环中退出,c++,c,debugging,gdb,C++,C,Debugging,Gdb,我正在调试如下所示的代码: while (true){ // do something ... size_t i = foo(); // <- bp set here if (flag_set) break; } // More code follows here ... while(true){ //做点什么。。。 size_t i=foo();//在循环后设置第二个断点。禁用循环内的断点。继续再次启用断点 我不知道有什么更简单的方法。尝试使用jump命令。根据g

我正在调试如下所示的代码:

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

// More code follows here ...
while(true){
//做点什么。。。

size_t i=foo();//在循环后设置第二个断点。
禁用循环内的断点。
继续
再次启用
断点


我不知道有什么更简单的方法。

尝试使用
jump
命令。根据
gdb
帮助,在这个系统上至少:

jump -- Continue program being debugged at specified line or address

在循环之前设置一个断点。然后将光标移到foo()调用,并使用
Debug | Run to Line
。这非常有用,因此我为其指定了一个函数键。

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

10 while(真){
11//做点什么。。。

12 size_t i=foo();//您需要的是until命令。这是避免单步执行循环的最简单方法。从:

继续运行,直到到达当前堆栈帧中超过当前行的源行。此命令用于避免单步执行循环不止一次。与下一个命令类似,只是当遇到跳转时,它会自动继续执行,直到程序计数器大于循环的地址跳


不,不,不,这实际上改变了程序计数器!我甚至不知道他们为什么提供这个功能,这太危险了。但这正是@oompahloompah所要求的:“完全跳出while循环(假设我们保证会设置标志,这样我们就可以跳出循环了。”oompahloompah想要的是一种执行剩余迭代的方法,而不是每次都在断点处停止。至少,我是这样理解的。请参阅我的答案以获得解决方案。您是否希望从字面上突破循环(就像您的代码中有一条
break;
语句一样)?或者只是指示gdb在退出循环之前不要再次停止?
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();