web-dev-qa-db-ja.com

Linux C ++プログラムでコアダンプを有効にする方法

私のプログラムはC++で書かれています。 -g3 -O0 -ggdbフラグを使用して、gccでコンパイルします。クラッシュした場合、コアダンプを開きます。コアダンプファイルを作成しますか?それとも、プログラム自体で、またはそれが実行されるコンピューターで、コアダンプ作成を有効にするために何かをする必要がありますか?このファイルが作成される場所とその名前は何ですか?

79
Alex F

ulimit -cを設定する必要があります。このパラメーターに0がある場合、コアダンプファイルは作成されません。こうします:ulimit -c unlimitedそしてすべてが正しいかどうかを確認しますulimit -a。コアダンプファイルは、アプリケーションがたとえば不適切なことを行ったときに作成されます。システム上のファイルの名前はcore.<process-pid-here>です。

104
Sergei Kurenkov

プログラム内でこのようにできます:

#include <sys/resource.h>

// core dumps may be disallowed by parent of this process; change that
struct rlimit core_limits;
core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &core_limits);
47
user2167243

デフォルトでは、平均的なユーザーはプロファイルをどうするかわからないため、多くのプロファイルはデフォルトでコアファイルサイズ0に設定されています。

ulimit -c unlimitedプログラムを実行する前に。

14
msw