ホームページ  >  記事  >  運用・保守  >  Linux で GDB を使用してマルチスレッド プログラムをデバッグするための一般的な構成方法

Linux で GDB を使用してマルチスレッド プログラムをデバッグするための一般的な構成方法

WBOY
WBOYオリジナル
2023-07-04 14:49:101858ブラウズ

Linux で GDB を使用してマルチスレッド プログラムをデバッグするための一般的な構成方法

はじめに:
マルチスレッド プログラミングでは、デバッグは不可欠なタスクです。 GDB は、マルチスレッド プログラムのエラーを見つけて解決するのに役立つ強力なデバッガです。この記事では、GDB を使用して Linux でマルチスレッド プログラムをデバッグするための一般的な構成方法を紹介し、コード例を示して、読者が GDB をよりよく理解して使用できるようにしたいと考えています。

1. GDB のインストール
まず、Linux システムに GDB をインストールする必要があります。ターミナルに次のコマンドを入力して、インストールを完了します。

$ sudo apt-get install gdb

2. マルチスレッド プログラムのコンパイル
マルチスレッド プログラムをデバッグする前に、まず単純なマルチスレッド プログラムを作成してコンパイルする必要があります。 。サンプル プログラムのコードは次のとおりです。

#include <stdio.h>
#include <pthread.h>

#define NUM_THREADS 5

void* thread_func(void* thread_id) {
    long tid = (long)thread_id;
    printf("Hello World! It's me, thread #%ld!
", tid);
    pthread_exit(NULL);
}

int main() {
    pthread_t threads[NUM_THREADS];
    int rc;
    long t;

    for (t = 0; t < NUM_THREADS; t++) {
        printf("In main: creating thread %ld
", t);
        rc = pthread_create(&threads[t], NULL, thread_func, (void*)t);

        if (rc) {
            printf("ERROR; return code from pthread_create() is %d
", rc);
            return -1;
        }
    }

    pthread_exit(NULL);
}

上記のコードを multithread.c という名前のファイルに保存し、次のコマンドを使用してコンパイルします。

$ gcc -g -pthread -o multithread multithread.c

Among -g オプションは実行可能ファイルにデバッグ情報を追加するために使用され、-pthread オプションはマルチスレッド ライブラリを導入するために使用されます。

3. GDB デバッグの開始
コンパイルが完了したら、GDB を使用してデバッグを開始できます。ターミナルで次のコマンドを入力します:

$ gdb multithread

4. GDB デバッグ オプションの構成
GDB には、マルチスレッド プログラムのデバッグを改善するのに役立つデバッグ オプションがいくつかあります。次のコマンドを入力して構成できます:

  1. 表示スレッド番号を設定します
    GDB に次のコマンドを入力して、表示スレッド番号を設定します:
(gdb) set print thread-events off
  1. 表示スタックを設定する
    GDB で次のコマンドを入力して表示スタックを設定します。
(gdb) set backtrace limit 10
  1. 表示スレッド情報を設定します
    GDB で次のコマンドを入力して、表示スレッドを設定します。 情報:
(gdb) show scheduling 
  1. 表示スレッド実行のコードの場所を設定します
    GDB に次のコマンドを入力して、表示スレッドの実行のコードの場所を設定します:
(gdb) set scheduler-locking on

5. ブレークポイントとモニタリング ポイントを設定する
デバッグ プロセス中に、プログラムの実行フローを制御するためにブレークポイントとモニタリング ポイントを設定できます。一般的に使用されるコマンドの例を次に示します。

  1. Set ブレークポイント
    GDB に次のコマンドを入力してブレークポイントを設定します。
(gdb) break function_name
  1. ブレークポイントの削除 をクリックします。
    GDB に次のコマンドを入力してブレークポイントを削除します:
(gdb) delete breakpoints
  1. Set監視ポイント
    GDB に次のコマンドを入力して監視ポイントを設定します:
(gdb) watch variable_name
  1. モニタリング ポイントを削除する
    GDB で次のコマンドを入力してモニタリング ポイントを削除します:
(gdb) delete watchpoints

6. マルチスレッド プログラムのデバッグ
GDB では、次のことができます。マルチスレッド プログラムをデバッグするには、次のコマンドを使用します。

  1. プログラムの開始
    GDB に次のコマンドを入力して、プログラムを開始します。
(gdb) run
  1. プログラムを一時停止します
    GDB に次のコマンドを入力して、実行中のプログラムを一時停止します:
(gdb) Ctrl+C
  1. すべてのスレッドを一覧表示
    GDB に次のコマンドを入力して、すべてのスレッドを一覧表示します:
(gdb) info threads
  1. 指定したスレッドに切り替える
    GDB に次のコマンドを入力して、指定したスレッドに切り替えます:
(gdb) thread thread_id
  1. 実行を継続するプログラム
    GDB で次のコマンドを入力して、プログラムの実行を続行します:
(gdb) continue

7. 概要
この記事では、GDB を使用して Linux でマルチスレッド プログラムをデバッグするための一般的な構成方法を紹介します。コード例が付属しています。デバッグ オプションを適切に構成し、対応するコマンドを使用することで、マルチスレッド プログラムの問題を適切に制御して特定し、デバッグの効率と精度を向上させることができます。この記事が読者のマルチスレッド デバッグに役立ち、さらなる学習と実践のきっかけになれば幸いです。

以上がLinux で GDB を使用してマルチスレッド プログラムをデバッグするための一般的な構成方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。