如何将分段错误地址映射到相应的C代码?
我在157e8250 ip 157e8250 sp bfa3fdfb上看到这样的分段故障如何将分段错误地址映射到相应的C代码?,c,linux,C,Linux,我在157e8250 ip 157e8250 sp bfa3fdfb上看到这样的分段故障segfault如何将此地址映射到发生故障的相应代码?假设您有可以编译的源代码。如果您使用调试符号编译它,并在gdb中运行它,它将用行号和其他好东西打印堆栈跟踪。我建议使用Valgrind。用法是: valgrind。如果编译时启用调试符号(使用gcc中的-g选项),您将获得发生SEGFULT的堆栈中每个级别的确切行号。使用套件中的addr2line实用程序。例如,它打印出文件名、行号和函数名(如果是C++函
segfault
如何将此地址映射到发生故障的相应代码?假设您有可以编译的源代码。如果您使用调试符号编译它,并在gdb中运行它,它将用行号和其他好东西打印堆栈跟踪。我建议使用Valgrind。用法是:
valgrind
。如果编译时启用调试符号(使用gcc中的-g
选项),您将获得发生SEGFULT的堆栈中每个级别的确切行号。使用套件中的addr2line实用程序。例如,它打印出文件名、行号和函数名(如果是C++函数,则对其进行解扩),以显示错误地址0x157e825:
addr2line -e my_executable_file -C -f 0x157e8250
您还可以在命令行中传递任意数量的地址,例如,如果只有指令地址的堆栈跟踪
确保使用-g
编译器选项编译程序以生成调试符号,否则addr2line
将无法为您符号化任何内容
# addr2line -e a.out 0x80484c8 -f
-e: executable file name
-f: generate function name