스택 프레임 출력을 분해하기 위해 CMake에 어떤 옵션이 제공됩니까?

스택 프레임 출력을 분해하기 위해 CMake에 어떤 옵션이 제공됩니까?

인쇄 스택 프레임이 방법사용된. 하지만 주로 실행 파일 이름과 주소를 인쇄합니다.

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

관련 정보