如何在循环之后设置断点
How to make a break point just after loop?
#include <iostream>
#include <vector>
using namespace std;
int in;
bool isPrime(int n) {
for (int i = 3; i <= n; i ++) {
if (n%i != 0) {
return false;
}
}
return true;
}
vector<int>* generateVector(int n) {
vector<int> v;
for (int i = 2; i < 20; i ++) {
if (i == n) {
continue;
}
if (isPrime(i+n)) {
v.push_back(i);
}
}
}
int main()
{
while(1) {
cin >> in;
vector<int>* nVectors[21];
for (int i = 1; i <= 20; i ++) {
nVectors[i] = generateVector(i);
} <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
}
这是一些c++代码。我想在for循环之后创建一个断点(箭头显示位置)。我找到了一种方法来解决它,通过在它之后添加一个语句,然后在这个语句中设置断点。但是添加一个没有意义的声明会让人感觉不舒服。那么,有没有更好的解决方案呢?
我正在使用GDB调试。PS:我已经知道如何设置断点在gdb。我的意图是在for循环结束后中断,并在nVectors中显示。谢谢。
对不起。这不是关于gdb或调试技能的问题,而是我的代码中有一个错误。所以当我输出nVectors
时,什么也没输出。修复后,您提供的每个方法都可以正常工作。谢谢。
您可以使用汇编断点,只需要了解for循环的汇编代码。
gdb <your_bin>
layout split
break *0x80488ad #assmebly code will look like
#0x80488ad jmp 0x8048874 <main+18>
gdb有一个添加断点的命令
有几种方法,但我认为可能对你有帮助的是:(gdb) break filename:linenumber
例如,我想在main。c
的第10行换行打破c: 10
你可能想试试教程http://www.yolinux.com/TUTORIALS/GDB-Commands.html
不,必须有一些语句让调试器能够设置断点
我不认为有一种方法可以直接做你想做的,但你仍然可以这样做。在循环的最后一条语句上设置断点。当调试器中断时,切换反汇编视图并向下滚动,直到找到要放置真正断点的位置。这将有效地在源文件的特定地址而不是行号上设置断点。
您可以在gdb命令行中指定循环结束的源文件和行,如下所示:
b file.c:123
如果您想在for循环之后执行,我相信您需要为while()循环的右括号设置换行符。但是您可以尝试这两种方法,看看哪种方法会产生期望的结果。
尝试使用until
命令。避免单步执行循环是很有用的。同样来自gdb手册:
直到总是停止程序,如果它试图退出当前堆栈框架。
如果是我,我会像其他人说的那样设置一个程序集断点。但是,如果您不想陷入其中,有一种更简单的方法:由于您知道循环计数(20),并且它不是很大,因此可以在循环内的最后一条语句(在您的示例中,是循环内唯一的语句)上设置断点,条件为
if (i == 19)
或者,您可以设置忽略计数:
ignore bnum 19
,其中bnum
为断点号。这可能更快,但在您的情况下差异可以忽略不计。
更多信息请参见gdb文档中的断点、观察点和捕获点。
- 在 vscode 中运行时无法暂停或设置断点
- 如何在进入动态打开的共享库时设置断点?
- 代码在 msvcrt .dll函数上设置断点失败
- 如何在 gdb 中的所有构造函数上同时为 C++ 对象设置断点?
- 使用 gdb 在模块中的特定行设置断点
- 无法设置断点以查看错误C 有序列表
- 使用Visual Studio Code和CMake调试OpenGL(使用GLEW&GLFW),无法设置断点
- 如何修复此错误:在malloc_error_break中设置断点以进行调试
- 在malloc_error_break中设置断点以在C++中调试
- 是否使用通配符设置断点
- 在Visual Studio中的dll中的函数处设置断点
- 正在设置断点,但未命中断点
- 如何在gdb中为函数的所有调用设置断点
- LLDB:通过控制台为malloc_error_break设置断点
- 如何在Linux中使用QTCreator中的dlopen打开的共享库中设置断点
- 当某个条件为真时,如何在 Eclipse 中以编程方式设置C++断点
- 如何使用 windbg 在不属于任何类的函数声明上设置断点
- 如何在捕获块中设置断点?(C++)
- 如何在 Visual Studio 中的 DLL 上设置断点
- 在名称包含 WinDBG 中的空格的重载函数处设置断点