少し前、マルチプロセスのMPIデッドロックのバグは、マルチプロセスの手順はバグが非常に面倒なことである見つけるために、出力に依存して、デバッグ中=。=!、後でマルチプロセスプロシージャをデバッグするために添付し、GDBができました。
シングルプロセス手順のデバッグにgdbを使用していた、それは気持ちのハッハッハ新しい世界への扉を開きます。
GDBがデバッガが実行されている添付する場合は、次のようにここでは、使用量があります。
ステップ1:ファイル名を指定して実行マルチプロセスプログラム。
まず、マルチプロセスプログラムの正常な動作。MPIデッドロックした後、プログラムを停止していません!!
ステップ2:実行プログラムは、すべてのpidを取得します。
別のウィンドウを開き、入力しますps -aux | grep 可执行文件名,此时屏幕上会打印出运行程序的信息。
例:3つのメッセージが表示され、次のプログラムを実行している2つのプロセスは、2つのカテゴリに分けることができ、一つは、プログラムを実行するためのメッセージであり、その他の情報はgrep検索処理です。それは最後の1で区別することができます。
runコマンドとして最後の3人に以下の情報は、当社が注力する必要がある最初の2つのコマンドのためのコマンドです。
2行目のPIDプロセスは、この時間は2つのプロセスが209947と209959であったのpid。
PS AUX $ | grepのテスト
Z 209の947 0.1 0.0 431 664 5552 PTS / 91 16:52午後12時00分S1を+ 実行コマンド
Z 209 959 0.0 0.0 92 984 596 PTS / 91 S + 16:52午後12時00分ランコマンド
Z 211971の0.0 0.0 109584 956 PTS / +午後4時53分夜12時grepのテスト92 S
ステップ3:各プロセスの動作を確認してください。
この時点で、あなたはそれぞれのプロセスに対応し、複数のウィンドウを開いて、いくつかのプログラムを実行する必要があります。
各ウィンドウには、PIDを添付し、GDB入力します
例:二つのプロセスを実行すると、2つのウィンドウを開く必要があり、
それぞれ入力
gdbが209947を添付します
gdbが209959を添付します
ステップ4:プロセススタック位置を確認してください
BT入力し、スレッドスタックを参照してください、あなたがアップ切り替えるとダウンスタック内の上下によってすることができます。
あなたは、行はプログラムカードに現在存在するかを確認することができます!
ガジェット:
ビュープロセスID:インフォ目下
スレッド情報を見る:情報スレッド
スイッチングスレッド:スレッド+スレッド番号