Linuxでスタック情報をどうやってプリントアウトするの?

Linux では、スタック情報を表示する方法はいくつかあります。

  1. gdbデバッガを使う:
  2. デバッグ情報を有効にするには、コンパイル時に -g オプションを追加します。
  3. 実行中にプログラムをデバッグするには、端末にてgdb <実行ファイル名>と入力してgdbデバッガを起動します。
  4. gdbプロンプトで「run」コマンドを実行してプログラムを実行する
  5. プログラムがクラッシュした際やスタック情報の出力が必要な際に、btコマンドを入力することでスタック情報を表示できます。
  6. バックトレース関数を使用する:
  7. コードに ヘッダーファイルを含めます。
  8. backtrace 関数を呼び出すことで、スタック情報を取得できます。
  9. バックトレース情報をbacktrace_symbols関数で可読な形式に変換して出力する。

簡単なコード例を以下に示します

#include <stdio.h>
#include <execinfo.h>

void printStackTrace() {
    void* buffer[100];
    int size = backtrace(buffer, 100);
    char** symbols = backtrace_symbols(buffer, size);
    
    printf("Stack Trace:\n");
    for (int i = 0; i < size; i++) {
        printf("%s\n", symbols[i]);
    }
    
    free(symbols);
}

void funcB() {
    printStackTrace();
}

void funcA() {
    funcB();
}

int main() {
    funcA();
    return 0;
}

コンパイルして上記コードを実行すると、スタック情報が出力されます。

bannerAds