LLDB显示提供的函数名称的错误行

时间:2018-03-16 07:43:54

标签: macos lldb

以下是用于调试测试的示例源

#include <stdio.h>
int k() {
  puts("test");
  // above line repeats to certain amounts
  return 0;
}

int main() {
  puts("test");
  // above line repeats to certain amounts
  return 0;
}

我在上面汇编了: clang -g -o test test.c

当我在LLDB提示符中运行list main时,LLDB会显示属于int k() {...}的行。即使第一行int main() {...}也未显示。

更奇怪的是,LLDB为符号main设置了正确的断点。

LLDB发生了什么?

1 个答案:

答案 0 :(得分:2)

举个例子,我看到了:

(lldb) list main
File: /tmp/test.c
   3      puts("test");
   4      // above line repeats to certain amounts
   5      return 0;
   6    }
   7    
   8    int main() {
   9      puts("test");
   10     // above line repeats to certain amounts
   11     return 0;
   12   }

当lldb按名称列出一个函数时,它会在符号名称周围显示一个窗口,因为人们经常将返回类型放在与函数名称不同的行上,但函数名称的行号总是在哪里调试信息告诉lldb函数是什么。这样您就可以看到整个函数定义。但实际名称应大致位于列表中间。

另请注意,list命令auto-repeat将继续列表,因此您可以继续点击Return(自动重复上一个命令)以查看更多来源。

如果这不是您所看到的,请先尝试运行lldb -x,以确保您的.lldbinit中没有影响此内容的内容。

如果仍然没有帮助,请提交http://bugs.llvm.org的错误。