行数是如何确定的?

时间:2017-05-15 16:13:04

标签: c lldb

我有一段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));的行中结束?

1 个答案:

答案 0 :(得分:1)

也许是编译器优化?这完全没有做任何事情,如果变量 Nc 没有在其他地方使用,可以完全删除,或者如果它 - 被 Nc = 3; 替换。说实话,我并不感到惊讶。将优化设置为 -Og