Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
addr2line返回???:0,即使使用-g3编译,gdb backtrace也可以工作_C_Linux_Debugging_Gcc_Stack Trace - Fatal编程技术网

addr2line返回???:0,即使使用-g3编译,gdb backtrace也可以工作

addr2line返回???:0,即使使用-g3编译,gdb backtrace也可以工作,c,linux,debugging,gcc,stack-trace,C,Linux,Debugging,Gcc,Stack Trace,对于一个较大的项目,我启动了一个小项目来编程一个模块,该模块在stderr上打印堆栈跟踪。我可以捕获异常(信号)并查看堆栈,但是,当我使用addr2line时,我的函数只打印???:0。我读到你需要用-g编译你的程序来获得调试信息。目前,我总是使用-g3进行编译,所以应该包括所有调试信息(对吗?)。因为gdb也需要调试信息,所以我测试了我的小程序,可以正确地回溯信号。函数名,行号,一切正常。我还知道,不同的include不会有输出,因为它们不是用-g标志编译的 这是我的密码: 导致灾难的源代码和

对于一个较大的项目,我启动了一个小项目来编程一个模块,该模块在stderr上打印堆栈跟踪。我可以捕获异常(信号)并查看堆栈,但是,当我使用addr2line时,我的函数只打印???:0。我读到你需要用-g编译你的程序来获得调试信息。目前,我总是使用-g3进行编译,所以应该包括所有调试信息(对吗?)。因为gdb也需要调试信息,所以我测试了我的小程序,可以正确地回溯信号。函数名,行号,一切正常。我还知道,不同的include不会有输出,因为它们不是用-g标志编译的

这是我的密码:

导致灾难的源代码和异常处理(set_signal_handler):

我将Eclipse用于这个项目和自行生成的makefiles(带有hello world示例的新c代码项目)。这个问题是否与eclipse和makefiles有关?还是代码有问题

这是编译器输出:

make all 
Building file: ../src/Backtrace.c
Invoking: GCC C Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Backtrace.d" -MT"src/Backtrace.o" -o "src/Backtrace.o" "../src/Backtrace.c"
Finished building: ../src/Backtrace.c

Building file: ../src/StackTrace.c
Invoking: GCC C Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/StackTrace.d" -MT"src/StackTrace.o" -o "src/StackTrace.o" "../src/StackTrace.c"
Finished building: ../src/StackTrace.c

Building target: StackTrace
Invoking: GCC C Linker
gcc  -o "StackTrace"  ./src/Backtrace.o ./src/StackTrace.o   
Finished building target: StackTrace

我正在使用Ubuntu 18.04。非常感谢您的帮助。

使用的地址不正确

例如,当消息[0]包含以下内容时:

0x5555557599c0 "/home/richard/Documents/forum/untitled(+0x1058) [0x555555555058]"
然后传递给
addr2line()
的参数应该是:

-a -f --exe=/home/richard/Documents/forum/untitled +0x1058
那么输出将是:

0x0000000000001058
posix_signal_handler
/home/richard/Documents/forum/untitled.c:209

现在您已经有了正确的参数信息,可以对参数进行一些试验。

OT:为避免在为不带参数的函数编写原型时出现编译器警告,请始终在原型语句的括号内插入
void
。建议了解函数:
peror()
strerror(errno)
因为它们可以让您在不使用
main()
的参数时大大减少所需的代码量,然后使用签名:
int main(void)
此语句:
stack\t ss={}
将导致编译器输出警告消息,建议使用:
stack\t ss存在类似的注意事项:
struct sigaction sig_action={}注意:行号包括通过
#include
语句列出的内容插入的行感谢您的快速响应。我想知道为什么我必须使用偏移量(?)
+0x1058
而不是
backtrace\u symbols
返回的地址
0x555058
。此外,是否有一种快速的方法可以从
backtrace\u symbols()
获取偏移量,以便我可以继续使用类似的语法?我想在嵌入式系统中实现该程序,因此我无法在
addr2line()
中手动输入偏移量。请在回答中注意
messages[]
的内容是如何生成的,以及偏移量地址是如何从
messages[]
中的数据中提取的。您可以编写必要的代码来提取偏移量。但是,库函数:
split
可能有助于
0x5555557599c0 "/home/richard/Documents/forum/untitled(+0x1058) [0x555555555058]"
-a -f --exe=/home/richard/Documents/forum/untitled +0x1058
0x0000000000001058
posix_signal_handler
/home/richard/Documents/forum/untitled.c:209