• ベストアンサー

gdbを使ったデバッグの方法について

Linux環境でC言語プログラムを開発している者です。 デバッグをgdbで行おうと思っているのですが、-gオプションを付けてgdb ./a.out でCの実行モジュールを使ったデバッグは行ったことはあるのですが、以下のようなshellスクリプト内で環境変数の設定を行い、設定した環境変数下で./a.out内にbreakポイントを設定するにはどうすればいいのでしょうか?ご教授お願いします。 Test.shの内容 #!/bin/sh export ftn22=’/home/test’ ./a.out Cの実行モジュール

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

シェルスクリプトを書き換えていいのなら./a.out を gdb ./a.out に書き換えればいいかと。 書き換えがだめだと時間的余裕があるなら前もってgdbを起動しておいてa.outが起動したタイミングでアタッチするとか。 くらいしか思いつきません。

spitzer3
質問者

お礼

シェルスクリプトの./a.outをgdb ./a.outに書き換えたところ、シェルスクリプト内の実行モジュールのデバッグができました。 今まで、このデバッグについては諦めようかと思っていたのですが、wormholeさんのご指南のおかげで念願叶いました。これでより効率的なデバッグができます。 ほんとにほんとにご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • CGIプログラムのデバッグ

    VisualC++5.0で、CGIのモジュールを作成してます。 これからで出来上がったプログラムのテストを行おうとして気づいた点があるのですが... この処理の中では、送信されてきたパラメータを解析しようと、 環境変数の"CONTENT_LENGTH"や"QUERY_STRING"を取得する処理をやっているのですが、 実際にVC++5.0のデバッガを動かしてみると、上の環境変数が設定されてない(当たり前ですが...) ために、null値しかこなくデバッグできずにいます。 VC++5.0のデバッグ機能で上の環境変数を設定しておきたいのですが、 何か良い方法はご存知ないでしょうか?

  • GDBでデバッグするとき文字列の中身見れますか?

    Cでプログラムを書いたんですけど、コンパイルは通るが実行すると「セグメンテーション違反です」と出ます。 そこでGDBを用いてデバッグをかけましたけど文字列の中身の見方が分かりません。 つまり、p i とすれば、いまの i の値を出力しますけど、どうすれば文字列 word の中身を見せてくれるか教えてください。 よろしくお願いします。

  • 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です。 よろしくお願いします。

  • bashでの変数の引渡し方法

    bashを使用するのが初めてなので教えてください。 shellscriptの中で変数を設定するのに共通変数設定用の子Shellを実行して変数を設定したいと思っていますが、うまく動きません。どのように設定したらいいのでしょうか。cshのときはsetenvでよかったのですが。。 親shell(hoge.sh) -------------- #!/bin/sh ./setenv.sh #変数設定用子Shell echo $USER exit 0 -------------- 子Shell(setenv.sh) -------------- #!/bin/sh USER="hoge" exit 0 -------------- 実行すると以下のようになります。 $./hoge.sh USER: not found

  • デバッグ環境の開発について。GDBSTUBについてとGDBのコマンドについて。

    H8/3048Fのソースレベルデバッグでつまづいています。 H8/3048Fでデバッグを行うためにgnu環境で、cygwinを用いてgcc・gdbを構築しました。 バージョンは、 binutils-2.16 gcc-core-3.4.6 newlib-1.13.0 gdb-6.1.1 です。 環境の構築はうまくいきました。 次にH8に書き込むターゲットであるSTUBの作成ですが、http://www.hk1.co.jp/H8b.jsp のホームページに記載されている3069用のSTUBを参考に3048用にに書き換えH8に書き込みました。 次にコマンドラインでGDBを起動し通信を行うところなのですが、ここのところでつまづいています。 まずはじめに、 set machine h8300h というコマンドは受け付けませんでした。これはh8300hのアーキテクチャにGDBを有効にするというものだと思うので、 set architecture h8300h としました。 次に速度の設定として set remotebaud 19200 としました。 (通信環境は速度19200bps、データビット8、パリティ無し、ストップビット1、通信ポートCOM2) 次にターゲットとして target hms /dev/com2 としましたが、そこでTIMEOUTエラーとなり通信が行えません。 自分として考えていることなのですが、これは、日立のモニタをターゲットとしているので通信できないのでしょうか? target remote /dev/com2 としたら、通信は出来ましたので、そうだと思うのですが、確信が持てません。どなたかご存知の方がいらっしゃればご説明をお願いします。 それと、もうひとつ。 target remote /dev/com2 で通信が出来たとして、 load でプログラムを書き込み、 run で、開始すると思うのですが、 runコマンドを入力しても、 The program being debugged has been started already. Start it from the beginning?(y/n) と表示されyとしても、そこで終わってしまいます。 また、cコマンドでコンテニューするとプログラムは動きますが、ブレークポイントやステップ実行が出来ません. なにか少しでも知っていることがあれば教えていただきたいです.よろしくお願いします.

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

    リモートデバッグについて質問があります。 現在、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

  • シェルによる環境変数の設定方法

    シェルによる環境変数の設定方法に関して質問があります。 ・二つのシェルファイルA.shとB.shがあります。 ・A.shの中でexportを使って環境変数を設定しています。 ・B.shの中でA.shを呼んでいます。 この場合、B.shを実行したコンソールにはA.shで設定した環境変数が設定されません。 B.shを実行したコンソールに別ファイルA.shが設定した環境変数を設定するには どのようにすればよいのでしょうか? 分かる方がいたら教えて下さい。宜しくお願い致します。

  • Linux環境でC++のGDBを途中から実行したい

    初歩的な質問で申し訳ないのですが、 現在LinuxでGDBの勉強をしています。 LinuxでC++で組んだプログラムを実行する際に 1.gdb a.out 2. run でmainから起動し、<調べたいクラス>::<関数>にbreakpoint設定を行ってから cで飛ばしていたのですが、 起動時、またはrun時に調べたいクラスの関数からはじめるということは可能なのでしょうか? 拙い文章で申し訳ありませんがご存知の方ご教授お願いいたします。

  • GDBである変数に条件を設定してブレイクしたい

    現在、GDBでデバッグを行っています。 https://sourceforge.jp/projects/cc1101driver/scm/svn/blobs/2477/trunk/20140411/event.c こちらのevent.cというファイル内の”void *event(void *param)” 関数内のi==1の場合にブレークをかけたいと思っております。 http://uguisu.skr.jp/Windows/gdb.html こちらのサイトで”ブレークポイントにブレーク条件を設定する”という項目で (gdb) break file.cpp:function (gdb) condition 1 x==1 (gdb) run このような設定があるとのことで、 (gdb) break event.c:*event このように設定してみたところ次のようなエラーが出てきました。 No source file named event.c. このように出てブレークポイントが設定できないのですが、これを解決する方法をご教示頂きますようお願い致します。

  • gdbデバッグのためのmakefile作成

    現在Ubuntu Linuxでgccプログラミングを行っています。現在、ソースコードをいくつかのファイルに分割して作成しています。コンパイル時はmakefileを使用してmakeして実行ファイルを作成しています。 現在のプログラムをgdbでデバッグできるようにしたいと思っているのですが、 その場合のmakefileはどのようにして書けば良いのかをご教示頂きますよう、お願い致します。 現在のmakefile内容 https://sourceforge.jp/projects/cc1101driver/scm/svn/blobs/2319/trunk/20140411/Makefile #test #CC = gcc #test:main.c event.c exe: main.o event.o env.o audio.o task.o comm.o menu_show_status.o gcc -o exe main.o event.o env.o audio.o task.o comm.o menu_show_status.o -lpthread main.o:main.c gcc -c main.c event.o:event.c gcc -c event.c env.o:env.c gcc -c env.c audio.o:audio.c gcc -c audio.c task.o:task.c gcc -c task.c comm.o:comm.c gcc -c comm.c menu_show_status.o:menu_show_status.c gcc -c menu_show_status.c

このQ&Aのポイント
  • 女性の薄毛の原因や改善方法について知りたいです。最近、生理が不規則になり薄毛が気になっています。髪の量が以前より減ってきているので、改善方法を教えていただきたいです。
  • また、白髪の増加や頭皮の痒みもありますが、これらは女性の薄毛と関連しているのでしょうか?更年期の影響やホルモンの問題との関連性についても教えていただけると助かります。
  • 女性の薄毛の改善方法や生活習慣の見直し、頭皮ケアのポイントなどについてご教授いただけると幸いです。薄毛の悩みを解消するためのアドバイスや対策法をお伺いしたいです。
回答を見る

専門家に質問してみよう