スタックフレーム出力を分解するために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

おすすめ記事