我看到这样的分段错误segfault at 157e8250 ip 157e8250 sp bfa3fdfb
如何将此地址映射到发生故障的相应代码?
问问题
2582 次
4 回答
5
使用GNU binutils套件中的 addr2line 实用程序。例如,这会打印出错误地址 0x157e8250 的文件名、行号和函数名(如果它是 C++ 函数,则将其解构):
addr2line -e my_executable_file -C -f 0x157e8250
您还可以在命令行中传递任意数量的地址,例如,如果您只有指令地址的堆栈跟踪。
确保使用-g
编译器选项编译程序以生成调试符号,否则addr2line
将无法为您表示任何东西。
于 2012-10-12T04:39:41.897 回答
5
您应该添加 gcc 的“-g”选项
使用 gnu 工具“addr2line”,例如,
# addr2line -e a.out 0x80484c8 -f -e: executable file name -f: generate function name
于 2012-10-12T04:41:50.557 回答
2
假设您有可以编译的源代码。如果你用调试符号编译它并在 gdb 中运行它,它会打印带有行号和其他好东西的堆栈跟踪。
于 2012-10-12T04:30:58.043 回答
2
我建议使用 Valgrind。用法是:
valgrind <your program name> <command-line arguments to your program>
。如果您使用调试符号进行编译(使用-g
gcc 中的选项),您将获得堆栈中发生段错误的每个级别的确切行号。
于 2012-10-12T04:33:55.440 回答