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

LLDB displays wrong line for the provided function name

下面是用于调试测试的示例源码

#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 是怎么回事???

根据你的例子,我明白了:

(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 按名称列出一个函数时,它会在符号名称周围显示一个 window,因为人们经常将 return 类型与函数名称放在不同的行中,但是函数name 的行号总是在调试信息告诉 lldb 函数所在的位置。这样你就可以看到整个函数定义。但实际名称应该大致在列表的中间。

另请注意,列表命令 auto-repeat 将继续列表,因此您可以继续点击 Return(auto-repeat 是最后一个命令)以查看更多源.

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

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