- ベストアンサー
gdbデバッガって?
「gdbデバッガでスタックトレースを解析して、どこでアプリケーションが落ちているか解析してください。」 と言われました。 はっきり言って、何を言ってるのか全然分かりません・・・ プログラム開発はしたことが無いので、デバッグとかも全然わかりません。 誰かそのやり方とか、言葉説明をしてもらえませんか? 御願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足されているように gdb を起動すれば大丈夫です。 gdb を起動しても、それだけではアプリケーションプログラムは動作しませんので、 既に常駐しているものと衝突する危険はありません。 コアファイルがある場合には、そのファイルによって落ちたときの状況を再現 しますので、プログラムを起動することもありません。 ただし、No.2 の方のいうように、デバッグ用にコンパイルされていないと、 無意味な情報の羅列しか得られない可能性もあります。 とりあえず、where コマンドの出力を提出しておくしかないでしょう。 デバッグすることを求められているのではなく、 落ちたときの情報の提供を求められているのですよね?
その他の回答 (2)
- gould09
- ベストアンサー率33% (196/589)
gdbのオンラインヘルプを載せておきます。 >プログラム開発はしたことが無いので、デバッグとかも全然わかりません。 プログラムの経験の無い人がこのような事を頼まれる事が理解出来ません。 gdbを使ってデバッグを行うと言う事は、自分でプログラムを作っていなくても デバッグするプログラムは理解している必要が有ります。 また、デバッグがを使うと言う事は、通常のプログラムの理解よりも、もっとハードに近い知識が必要とされ、そこが分かっていない人に説明しても何も理解出来ないと思います。(例えば、スタック、レジスタ、論理アドレス、マシン語...) また、デバッガを動かすためには、コンパイルオプションにデバッグ情報を作成するように指定して置く必要が有ります。
- punchan_jp
- ベストアンサー率55% (155/280)
もうちょっと背景説明が欲しいところですが、 gdbということは、UNIX系のアプリケーションでしょうか? コアファイルは残っているでしょうか? あるいは、そのアプリケーションをほぼ確実に落とす手順はあるでしょうか? 前者なら、 gdb アプリケーションプログラムファイル コアファイル として起動してください。後者なら、 gdb アプリケーションプログラムファイル として起動し、アプリケーションが落ちるまで進めて行ってください。 アプリケーションプログラムがデバッグ用に作成されていれば、 ここで where コマンドを実行することで、落ちた時点の関数がどのような手順で呼び出され いるかの履歴と、各引数の値が表示されるはずです。これがスタックトレース です。 どのソースファイルの何行目であるかも表示されているはずです。 これらの情報を渡せばいいんではないでしょうか?
補足
ご回答ありがとうございます。 アプリケーションはHP-UX11.0上で動いています。 コアファイルは残っています。 プログラムは常駐プログラムなので落とすことはできません。 例えば、 プログラムの実行ファイル?:test コアファイル:test1 だとすると gdb /フルパス/test /フルパス/test1 と実行すればいいのでしょうか? あと、プログラムが落ちていなくても、gdbコマンドを実行しても大丈夫でしょうか? いろいろ書いてしまいましたが、宜しく御願い致します。
お礼
ありがとうございます。 ちょっと勉強不足過ぎました・・・反省・・・ 言われたとおりにしてみたんですが、どうやら、メモリの破壊によるプログラムの異常終了のようです。 SIGILL:illegal instruction というメッセージが出ていました。 ありがとうございました。