【问题标题】:How are line numbers determined lldb?行号如何确定lldb?
【发布时间】:2017-05-15 16:13:03
【问题描述】:

我有一段 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(&amp;(En)); 的行设置一个断点,即我原始代码中的第 130 行。但是当我在 130 处设置断点并运行程序时,它会落在Nc = j;。如果我尝试将断点设置为 129、128、127 等,我要么在同一行结束,要么在第一个 for 循环的右花括号之后的行结束。

为什么会发生这种情况,我怎么会出现在包含 myFunc(&amp;(En)); 的行中?

【问题讨论】:

  • 你用调试信息编译了吗?你确定调试器有正确的源文件可用吗?
  • @EOF 是的,我只使用-g 标志进行编译。我注意到添加注释行后我没有重新编译。我重新编译,它现在工作。谢谢!

标签: c lldb


【解决方案1】:

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

【讨论】:

  • 据我所知,我没有优化。我只有-g 标志。 Nc 在脚本中的某处使用,但我没有包含它。我尝试使用标志-Og,但出现错误:error: invalid integral value 'g' in '-Og'
  • 你用什么编译器?
  • 海合会。事实证明,这些行不匹配,因为我在将 cmets 添加到文件后没有重新编译。
  • :):):):) 好一个:)。无论如何,如果您想禁用所有优化,请使用 -Og 选项。它必须工作
猜你喜欢
  • 2013-03-03
  • 2018-04-27
  • 2020-03-19
  • 2011-10-12
  • 2011-01-21
  • 2018-11-26
  • 1970-01-01
相关资源
最近更新 更多