如何让GDB跳出循环?

34

我可以使用return让GDB立即从函数中返回,使用call myFunction来调用函数。

但是,如何使它跳出当前循环?也就是说,像命中break;语句一样操作。

使用jump myfile.c:<linenumber>这种方式可以实现吗?


你想正常执行循环并通过 break 退出,还是通过完全跳过循环来改变执行方式?这是为了区分 https://dev59.com/g2Uq5IYBdhLWcg3wQ-NF。 - Ciro Santilli OurBigBook.com
4个回答

25

您可以使用until使循环结束。

应该在循环的结尾处添加until

如果您不需要迭代循环,则这非常有用。


1
如果我正确阅读了文档(http://www.delorie.com/gnu/docs/gdb/gdb_38.html),那么这相当于在循环后设置临时断点 - 我想要跳出循环。 - John Carter
2
这个提示仍然有价值,虽然它不是问题的答案。也许问题应该扩展,包括一个明确的声明,表明您不想要这个功能? - hochl
有人能解释一下为什么这个回答的赞数比旧的和被接受的回答还要多吗? - Nike
@Nike,“jump”是一种相当粗糙的强制光标移动的方式,涉及找出正确的行号。而“until”则是专门用于跳过for循环的。 - Cheetaiean
@Cheetaiean “until” 什么时候?“Until”通常是一个词,在另一个词之前出现。 - Nike

15

跳转到[行号]让我退出循环并跳转到我想要的那一行。这就是我在寻找的答案(也是OP接受的答案)。我不知道为什么其他的回答(在我看来写得很差,至少直到我编辑它之前)获得了更多的赞。 - Nike

5
我会这样做:
1. 进行源代码清单。
2. 在循环结束的下一行设置断点。
3. 继续执行。

9
你甚至不需要一个真正的断点。你可以使用 until 命令告诉它一直执行到某一行。这是一个一次性的断点。 - Nathan Fellman
8
这并不是打破循环,而是等待循环结束(可能永远不会结束)。 - Torsten Marek
https://dev59.com/g2Uq5IYBdhLWcg3wQ-NF - Ciro Santilli OurBigBook.com

1

其中一种方法是将循环的条件设置为false。但这意味着您必须等待当前迭代完成。

因此,总结步骤如下:
1. 在循环的最后一行设置断点
2. 继续执行
3. 当断点命中时,将循环条件变量设置为false。

但它不会像直接使用break语句那样起作用。


1
是的,这通常是我所做的,但我相信一定有一种模拟break;的方法。 - John Carter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接