以前こちらで CentOS でデバッグ方法を紹介しました
Aborted (core dumped) のデバッグ方法
使用している OS が Ubuntu に変わったことと、プロセス間通信を行うプログラムの実行中に Aborted (core dumped) が出たので、ステップ実行では追えず、CoreDump を取得してデバッグすることにしました
今回は Ubuntu で CoreDump を取得する方法を紹介となります
とは言っても、Ubuntu で CoreDump を取得する に書かれている内容そのままでしたので補足を書いておきます
(gdb) bt
を実行することで、問題が発生した箇所での関数呼び出しの履歴を表示することができます
#15 0x0000558f2bbce637 in sprintf () at /usr/include/x86_64-linux-gnu/bits/stdio2.h:38
sprintf で問題が発生していることが分かります
プログラムの内容としては std::string を char[] に代入している箇所でした
そのため std::string → char[] を参考に basic_string::copy() を使用することで解決しました
std::string str = "abcd";
char cary[4];
str.cpy(cary, str.size());
以下、参考サイト
Ubuntu で CoreDump を取得する
バックトレース
std::string → char[]
以下、関連書籍
コメント