• 締切済み

デバッガをデバッガに掛けたい

 GDBを使ってとあるプログラムをデバッグしているんですが、GDBの動作に疑問があって詳細を調べたくなりました。そこで、デバッグ中のGDBをまたGDBに掛けてデバッグすることを考えたのですが、これを単純にやると二番目のGDBに端末を取られちゃって、一番目のほうは入力がブロックされてしまうようです。  GDBのソースを変更せずに、こういうことを実現する方法はないでしょうか?

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

ヒントにならないヒント程度の情報で申し訳ありませんが、 debugeeの方のgdbをコマンドファイル経由で動かすというのはどうでしょうか? Debugging with GDB - 一連のコマンドのグループ化 http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gdb-5.0/gdb-ja_17.html GDBによるテスト自動化への試み http://www.fireproject.jp/feature/gdb/advanced/auto-test.html こういう場合にリモートデバッグってできるんですかね?

bobviv
質問者

お礼

よく調べてみたら、ターゲットはSIGSTOPを喰らって停止しているだけでした^^; contを打ったら戻りました。馬鹿な質問して申し訳ありませんでしたね。端末が凍ったので何かセッショングループ関係の処理がされてバックグラウンドに回されたのかと妄想してしまいました。どうも有難うございました。

bobviv
質問者

補足

書き込み有難うございます。コマンドファイルですか、なるほど。できるかも知れません。やってみてお礼で報告させていただきます。

関連するQ&A

  • GDBデバッガの使い方について

    こんにちは! 現在、GDBを使用しています。 変数の値を変更する方法を教えてください。 普通、変数の値を変更する場合、 (gdb)set var 変数名=変更したい値 で変更できると思うのですが、 構造体内のある変数を変更する場合はどのようにすればよろしいでしょうか? 例えば下記の場合、 (gdb)print 構造体名.変数名 $12 = "abab" (gdb)set var 構造体名.変数名=変更したい値 と入力すると、下記のエラーメッセージが出ます。 [Too many array elements] 何は方法はありますでしょうか? 宜しくお願いいたします。

  • デバッガ gdbを使用していると。。。

    このカテゴリでいいのか分からないのですが質問させていただきます。 UNIX上でC言語のプログラムソースをgdbでデバッグしているとき、最初 run でプログラムを走らせますが、その際、次のようなシグナル?が発生します。 Program received signal SIGLWP, Signal LWP. 0xef3b99c8 in __lwp_mutex_unlock () 結構頻繁に出るのですが、再度runすると、普通に動かせるのであまり気にはしていなかったのですが・・。 システムコールの本を読んでもSIGLWPはのっていません。 調べ方がまだまだ足りないと思いますが、 もしどなたかご存知の方いらしたら教えてください。 よろしくお願いします。

  • 質問ですが

    http://oshiete1.goo.ne.jp/qa4976551.htmlのつづきで質問をしたいのですが、いろいろと教えていただいたとおりにやっていき、出来そうなところまではきたのですが、 作成したプログラムをビルドを行おうとすると **** プロジェクト C言語 の構成 Debug の ビルド **** **** 内部ビルダーがビルドに使用されます **** C言語 用にビルドするものはありません と表示され、そのままデバッグしようとすると セッションの作成エラー…(詳細)セッションの作成エラー プログラム "gdb" を実行できません: Launching failed プログラム "gdb" を実行できません: Launching failed プログラム "gdb" を実行できません: Launching failed と出てきてしまいます。 これを解消するためにはどうすればいいか教えていただけないでしょうか? コンパイラはMinGWを使っています。

  • gdbでFortranの名前つきcommonブロック内の変数の表示

    いまどきFortranなんてカテゴリーさえもないのですが、よろしくお願いします。 去年の暮れからLinuxを使って、Fortranで計算をしています。 質問は、Fortranの名前つきcommonブロック内のの配列変数をgbdを使ってデバッグしている時にprintコマンドで表示したいのですが、やり方がわかりません。 write文を使うというデバッグ方法には戻りたくないので、gdbで解決したいのですが、いかがなものでしょう?

  • プログラムが正しく動きません。

    http://plaza.rakuten.co.jp/kakuekiteisha5/diary/200912260000/のページの素数判定プログラムで、 コンパイルは問題なく通るのですが、 実行すると、同じ入力でも結果が変わったり、 デバッグ時に同じ入力で Program terminated with signal SIGABRT, Aborted. というエラーが出たり出なかったりします。 原因がどうしてもわかりません。 どなたかよろしくお願いします。 ちなみに、コンパイラはgcc、デバッガはgdbを使っています。

  • シーケンサープログラマを効率よく回転させる為に、1つのプログラムを複数

    シーケンサープログラマを効率よく回転させる為に、1つのプログラムを複数のプログラマが分担して行い、それぞれのブロックごとで、デバッグしても、他に影響が出ない、方法は有るでしょうか プログラムの組み方のルールを決めて、フローチャート、動作図等の資料を揃えて、ジャンプ命令は極力使用せず、同じ動作も 各ブロックで出ても、都度ベタ書きし、他の人がやったところでも、その部分の動きさえデバッグすれば他の動作に影響が出ない。 このような事が出来れば、外注に委託しても、後日のフォローが社内で出来るし、トラブル発生時に本人が出張しなくても 変わりの者で代われるし、3交替で急ぎの仕事を片付けられるし良いと思うのですが、わが社のプログラマーに提案しても ハアーと言うだけで、誰もこの話に乗ってきません。何故でしょう? このような事を教えてくれるところは無いでしょうか? 教えてください

  • perl のデバッグ 途中で止める方法

    HomeMailのcgiがうまく動作しません デバッグぢたいのですが 変数をPrintし、そこで実行をとめたいのです これを実現する方法を教えてください

    • ベストアンサー
    • CGI
  • Cygwin+GDBでターミナルの設定?

    Linux系ではないのですが、こちらには詳しい方がいらっしゃると思いますので、ここで質問させてください。 Cygwin環境でgdbを走らせてデバッグしようとしているのですが、gdb上ではTABキーによるコマンド補完や、↑キーによるコマンド履歴呼び出しができずに困っています。 bashを起動した状態のときは、bash上ではコマンド補完や履歴呼び出しはできています。 そこからgdbを起動すると補完や履歴呼び出しはできなくなります。 これは、ターミナルの設定の問題ですか?それともgdbの設定の問題ですか? 「・・・できなくなる」と書いてますが、全く利いていないわけではないようです。 gdb上で、↑キーを押すとその時点ではカーソルが上に移動するだけです。さらにもう一度↑キーを押してから(もちろん更にカーソルがもう一行上に移動する)ENTERを押すと、2つ前に入力したコマンドが実行されます。 また、同じくgdb上で、「d」とタイプしてからTABキーを2回押すと、カーソルがタブスペースの分だけ右へ2回移動するだけですが、ENTERを押すと「d」から始まるコマンドの一覧が出ます。 どうやら、ENTERを押すまではキー操作がgdbに伝わっておらず、ENTERと同時にgdbに渡されているようです。 それから、CTRL+Cで実行中のプログラムが停止しません。しばらくだんまりになったあと、gdb自体が終了します。これも、どうにかして、CTRL+Cで止まるようにしたいです。 関係ないかもしれませんが、bashのバージョンは4.1.10、gdbのバージョンは7.2です。 よろしくお願いします。

  • リモートデバッグについて

    リモートデバッグについて質問があります。 現在、Red Hat Linux 9.0にて、C言語のプログラミングをしています。 いま作っているプログラムは、CUIの簡単なものです。 環境は以下のとおりです。  エディタ :vi  コンパイラ:gcc  デバッガ :gdb ですが、viに慣れていないのとgdbだとデバッグは全てコマンドになるので、 効率が上がらないです。(スキルも無いのですが。) そこでWindowsXPのマシンで、samba共有のソースをエディタで 編集してみると便利でした(パソコンは2台あります) ただ、コンパイルとデバッグはLinux上になってしまうので、そこから先は同じです。。。 WindowsマシンでLinuxに入っているgdbのフロントエンドみたいなことできないでしょうか? (コンパイル・実行は、Linux上で行われるけど、デバッグは、Windowsから行える) 何か、いい環境はありませんでしょうか? また可能であれば、手順等をお教えいただけますか? ※ちなみにLinuxマシンは、中古の5000円で購入したボロの為、Xウインドウを入れていないです。  なので、GUIの統合環境をLinuxマシンで使用するというのは無しでお願いします。  また、windowsマシンにcygwinを入れるというのもLinuxマシンが可哀想なので、  今回は無しでお願いします。 下記のアドレスにあるソフトを使うと私のしたいことが出来るような気がするのですが、 英語のページなので、細かいところがわかりません。。。 BVRDE http://bvrde.sourceforge.net/index.htm

  • gdbで無名名前空間の関数にブレイクポイント

    Windows+cygwin+emacsでc++のプログラムを勉強しています。デバッガとしてemacs上でgdbを使っているのですが、無名の名前空間にある関数にブレイクポイントを設定する方法がわかりません。例えば、 namespace {  void foo() {    ...  } } int main(void) {  foo(); } のようなfoo.cppファイルをコンパイルしてfoo.exeファイルを作り、それをgdbによりデバッグするとします。そこで、gdb上で b main とすると、mainに入ったところにブレイクポイントが設定されますが、 b foo としても、Function "foo" not defined.と表示されてブレイクポイントが設定されません。無名の名前空間にある関数にはどのように入力してブレイクポイントを設定するのでしょうか。とりあえず、今は行番号によりブレイクポイントを設定しています。ご存じの方がいらっしゃいましたら、ご教授ください。お願いします。

専門家に質問してみよう