打印堆栈帧这个方法用来。但它主要打印可执行文件名称和地址。
0 ./fish(+0xa307b) [0x556c9198c07b]
1 ./fish(+0xb0cf2) [0x556c91999cf2]
2 ./fish(+0xb218a) [0x556c9199b18a]
3 ./fish(+0x151c2) [0x556c918fe1c2]
4 /lib/x86_64-linux-gnu/libc.so.6(+0x29d90) [0x7fb0f2973d90]
5 __libc_start_main + 128
6 ./fish(+0x16ff5) [0x556c918ffff5]
项目本身使用CMake
,生成 with-DCMAKE_BUILD_TYPE=Debug
没有帮助。
我需要向 CMake 提供什么选项才能获得更清晰的输出?
答案1
程序需要有所有符号。GCC
说链接器的选项是:
-rdynamic
在支持它的目标上将标志 -export-dynamic 传递给 ELF 链接器。这指示链接器将所有符号(而不仅仅是使用过的符号)添加到动态符号表中。 “dlopen”的某些用途需要此选项或允许从程序内获取回溯
问题已解决使用CMAKE_ENABLE_EXPORTS多变的。在 CMakeLists.txt 中执行cmake -DCMAKE_ENABLE_EXPORTS=ON ..
或提供set(CMAKE_ENABLE_EXPORTS ON)
可以解决该问题。
0 reader_data_t::is_repaint_needed(std::vector<highlight_spec_t, std::allocator<highlight_spec_t> > const*) const + 59
1 reader_data_t::readline[abi:cxx11](int) + 498
2 reader_read(parser_t&, int, io_chain_t const&) + 730
3 main + 6706
4 /lib/x86_64-linux-gnu/libc.so.6(+0x29d90) [0x7f6f22628d90]
5 __libc_start_main + 128
6 _start + 37