コードブロックを使用して実行可能ファイルをコンパイルしたプロジェクトがあります。CMAKE を使用するようにコンパイル チェーンを変更しました。コンパイルと実行はうまくいきます。
問題は、クラッシュ後にコアダンプが生成される場合です。次のコマンドを使用して gdb で分析します。gdb myapp --core=core.1222
実行可能ファイルが生成されたコンピューターで gdb を実行すると、すべてのシンボルが取得され、スレッドとローカル変数を調べることができます。
問題は、別のコンピューターで gdb を実行しようとすると、シンボルを取得できないことです。次の警告が表示されました:
BFD: Warning: /home/.../core.1222 is truncated: expected core file size >= 307032064, found: 307027968
gdb 表示の「情報スレッド」?? 代わりに関数名。
私の CMakeLists.txt には以下が含まれます:
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../bin )
SET(CMAKE_USE_RELATIVE_PATHS ON)
SET(CMAKE_VERBOSE_MAKEFILE ON)
SET(CMAKE_CXX_COMPILER g++)
SET(CMAKE_BUILD_STRIP FALSE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
codeblocks と cmake で使用される呼び出された make コマンドを比較しました。オプション -o: を除いて、cmake と非常によく似ています。
-o CMakeFiles/monappilcation.dir/home/.../main.cpp.o
そしてコードブロック付き:
-o obj/Release/.../main.cpp.o
コマンドnm -a
はすべてのシンボルを正しく表示します。
私の質問は次のとおりです。
- gdb は予想されるサイズをどのように計算しますか?
- cmake コンパイル ツール チェーンを使用してシンボルを取得するにはどうすればよいですか?
あなたの提案は大歓迎です。