我有一段C代码,我试图使用lldb进行调试。我试图在代码中的某一行设置断点,但我的代码中的行号与lldb所在的位置不匹配。
我可以看到它不计算空行,带有命令的行,带有变量声明的行,带有#include
语句的行等,但是我不能使lldb登陆通过尝试在不同的行上设置断点来确定某一行。下面是代码相关部分的草图。 注意我无法发布整个内容,因为它太长了,而且我也没有写,所以我没有权限分享它。
#include <stdio.h>
...
#include ...
// global var declarations
double X;
...
int ind;
int main()
{
// variable declarations
int a, b, c, i, j, N, Nc;
...
double x, y, z;
// some initializations and calculations
a = 19;
b = 10;
c = a + b;
// one for loop doing some calculations
for (i=0; i<N; i++){
// some calculations here
a += c;
}
double En; // more var declarations
myFunc(&(En));
printf("hello world\n");
// more declarations
file = fopen("file1.dat","w");
for(j=1; j<3; j++)
{
Nc = j;
}
// rest of the code
}
我想在包含myFunc(&(En));
的行中设置一个断点,这是我原始代码中的第130行。但是当我在130处设置断点并运行程序时,它会降落在Nc = j;
。如果我尝试将断点设置为129,128,127等,我要么在同一行结束,要么在第一个for循环的结束大括号之后的行。
为什么会发生这种情况?如何才能在包含myFunc(&(En));
的行中结束?
答案 0 :(得分:1)
也许是编译器优化?这完全没有做任何事情,如果变量 Nc 没有在其他地方使用,可以完全删除,或者如果它 - 被 Nc = 3; 替换。说实话,我并不感到惊讶。将优化设置为 -Og