인쇄 스택 프레임이 방법사용된. 하지만 주로 실행 파일 이름과 주소를 인쇄합니다.
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
생성하는 것은 -DCMAKE_BUILD_TYPE=Debug
도움이 되지 않습니다.
더 깔끔한 출력을 얻으려면 CMake에 어떤 옵션을 제공해야 합니까?
답변1
프로그램에는 모든 기호가 있어야 합니다. GCC
링커 옵션은 다음과 같습니다.
-rdynamic
이를 지원하는 대상의 ELF 링커에 -export-dynamic 플래그를 전달합니다. 이는 링커에게 (사용된 기호뿐만 아니라) 모든 기호를 동적 기호 테이블에 추가하도록 지시합니다. "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