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();