Macos LLDB为提供的函数名显示错误的行
下面是用于调试测试的示例源Macos LLDB为提供的函数名显示错误的行,macos,lldb,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; } #包括 int k(){ 看跌期权(“测试”); //以上行重复一定数量 返回0
#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;
}
#包括
int k(){
看跌期权(“测试”);
//以上行重复一定数量
返回0;
}
int main(){
看跌期权(“测试”);
//以上行重复一定数量
返回0;
}
我在上面汇编了:
clang-g-o测试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按名称列出函数时,它会在符号名周围显示一个窗口,因为人们通常将返回类型与函数名放在单独的一行上,但函数名的行号总是在调试信息告诉lldb函数所在的位置。这样您可以看到整个函数定义。但是实际名称应该大致在列表的中间。
还请注意,list命令auto repeat将继续列出,因此您可以继续点击Return(自动重复最后一个命令)来查看更多源代码
如果您没有看到这种情况,请首先尝试运行lldb-x
,以确保.lldbinit中没有影响这种情况的内容
如果仍然没有帮助,请提交一个bug。根据您的示例,我看到:
(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中没有影响这种情况的内容
如果仍然没有帮助,请提交一个bug。您可以尝试使用更长的源代码吗?在
k
和main
中再添加至少15行。你看到了什么?我只是想知道其他Mac的行为。我在main和k中添加了一堆线,并添加了一些其他函数,“main”线略低于中点,就像上面一样。请注意,lldb(或clang,我还不确定是哪个)有一个已知的bug,其中列出函数名列出了函数的声明,而不是它的定义源代码行。例如,如果声明位于.h文件中,它将列出.h文件中的行。也许你看到了?不,我没有从你的律师事务所得到什么。我确实做了listmain
,我的lldb在intk()中间显示了这一行,此时可能最好提交一个bug。请确保提供您正在使用的lldb&clang版本。是否可以尝试使用更长的源代码?在k
和main
中再添加至少15行。你看到了什么?我只是想知道其他Mac的行为。我在main和k中添加了一堆线,并添加了一些其他函数,“main”线略低于中点,就像上面一样。请注意,lldb(或clang,我还不确定是哪个)有一个已知的bug,其中列出函数名列出了函数的声明,而不是它的定义源代码行。例如,如果声明位于.h文件中,它将列出.h文件中的行。也许你看到了?不,我没有从你的律师事务所得到什么。我确实做了listmain
,我的lldb在intk()中间显示了这一行,此时可能最好提交一个bug。请确保提供您正在使用的lldb&clang版本。