Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++でコアダンプをデバッグする方法を徹底解説

コアダンプとは何か?

プログラム内で異常が発生すると、オペレーティングシステム(OS)はそのプロセスを強制終了させると同時に、「コアダンプ」と呼ばれるファイルを出力します。コアダンプが発生する最も典型的な原因は、プログラムがNULLポインタや、割り当てられたメモリ領域外の無効なポインタ値にアクセスしたことです。

クラッシュの際、OSは後から原因を解析できるように、その時点のメモリ内容などの情報をファイルへ書き出そうとします。このファイルこそが「コア」であり、これを活用することでプログラムの診断とデバッグが可能になります。

コアダンプのデバッグ手順

デフォルトでは、コアは /proc/sys/kernel ディレクトリに出力されます。コアを有効にデバッグするためには、事前にプログラムを -g オプション付きでコンパイルしておくことが重要です。このオプションによりデバッグシンボルが実行ファイルに埋め込まれ、ソースコードレベルでの詳細な解析が可能になります。

コアファイルが生成されたら、以下のコマンドでGDB(GNUデバッガ)を起動します。

$ gdb 実行ファイル名 コアファイル名

このコマンドを実行すると、GDB上でコアファイルが開かれ、クラッシュ時の状態を詳しく調査できるようになります。さらに、bt(バックトレース)コマンドを使えば、どの関数のどの場所でクラッシュが発生したのかを素早く特定でき、デバッグ作業を大幅に効率化できます。

GDBの使い方を学ぶには

GDBの操作に不慣れな方は、IBMが公開している以下のチュートリアルが参考になります。基本的なコマンドから実践的な使い方まで丁寧に解説されています。
https://www.ibm.com/developerworks/library/l-gdb/

  1. C/C++でn番目のカタラン数を求めるプログラム

    カタラン数(Catalan numbers)とは、組み合わせ論におけるさまざまな数え上げ問題に現れる自然数の数列です。特に、再帰的に定義される対象の個数を数える場面で頻繁に登場することで知られています。カタラン数の主な性質ディック語(Dyck word)との関係Cn は、長さ 2n のディック語の総数を表します。ディック語とは、n 個の X と n 個の Y から構成され、文字列のどの先頭部分を見ても Y の数が X の数を超えない文字列のことです。例えば、長さ 6 のディック語は次の通りです。XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY.正しい括弧の対応付けX を開き

  2. C++で簡単なプログラムを作成する方法【初心者向けステップ解説】

    C++で最初の簡単なプログラムを作成するには、まず開発環境を整え、その上でプログラムを書いて実行します。この記事では、非常にシンプルな「Hello World」プログラムを例に、C++プログラミングを始めるための手順をわかりやすく解説します。ステップ1:C++コンパイラを入手するC++の学習を始める前に、まず必要になるのがコンパイラです。主要なOSプラットフォーム向けに、優れた無料のC++コンパイラが多数公開されています。自分の環境に合ったものをダウンロードするか、tutorialspoint.comが提供するオンラインコンパイラ(https://www.tutorialspoint.com/