Oracle Solaris Studio 12.2: dbx コマンドによるデバッグ

スタックトレースの使用

並列領域で実行が停止されると、アウトラインサブルーチンを含んだスタックトレースがwhere コマンドによって表示されます。


(dbx) where
current thread: t@4
=>[1] _$d1E48.main(), line 52 in "test.c"
  [2] _$p1I46.main(), line 48 in "test.c"

--- frames from parent thread ---
current thread: t@1
  [7] main(argc = 1, argv = 0xffffffff7fffec98), line 46 in "test.c"

スタックの上位フレームはアウトライン関数のフレームです。コードが略述されているにもかかわらず、ソース行番号は依然として 15 にマップされます。

並列領域で実行が停止されたときに、関連フレームがアクティブ状態である場合、スレーブスレッドの where コマンドはマスタースレッドのスタックトレースを出力します。マスタースレッドの where コマンドは完全トレースバックを行います。

まず omp_team コマンドを実行して現在のチームのすべてのスレッドをリストし、次にマスタースレッド (OpenMP スレッド ID が 0 のスレッド) に切り替え、そのスレッドからスタックトレースを取得することによって、実行が、スレーブスレッドでブレークポイントにどのように到達したかを判断することもできます。