• ベストアンサー

デバッグについて

javacコマンドにて問題なくコンパイルされるのに実際動かすとどうにも動かなくなるときには、デバッグは役に立つのですか。初心者なのでできるだけ丁寧に教えてください。よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • po-net
  • ベストアンサー率36% (172/477)
回答No.2

>自分で書いたプログラムの中でほかのclassのメソッドを使って部分がおかしいことが解っているのですが、そのメソッド内のどこがおかしいのか解る方法を是非教えていただきたいのですが。 一番古典的ですが簡単・確実なものは、「ログを残す」という方法です。 ・・・といっても、java.io.Fileを使うわけでなく、System.out.println() を使用します。 例えばこんな感じで。。。 class Test { public static void main(String args[]) { int[] a = {1,2,3}; System.out.println("For Debug 1"); a[1] = 4; System.out.println("For Debug : a[1]=" + a[1]); System.out.println(a[5]); System.out.println("For Debug : finish !!"); } } こうすると、「For Debug : a[1]=4」という出力を最後にエラーになります。 ・・・ということは、エラーはそれ以降に存在するわけです。 始めは適当な位置に2~3個入れておいて、少しずつ細かくしてください。 そうすると、エラーが発生した箇所にたどり着けます。 また、ログ内容によって、こんなことも分かります。 ・同じ出力が何度も無意味に表示 ⇒ 予想外のループの発生 ・分岐後の出力がおかしい ⇒ 分岐の問題 ・変数の値がおかしい ⇒ 途中の処理に誤りがある 他には・・・例外についての知識はありますか? システムのダウンが例外の発生によるものでしたら、try~catch~finallyで対処できます。 このとき、例外の内容を出力させると、「どこのファイルのどの行で例外が発生しているのか」が分かります。 (例外の内容出力 : printStackTrace() を使う) 上のプログラムの場合、こんな表示がコマンドプロンプト上に表示されます。 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException at Test.main(Test.java:7) これは、「Test.javaのmain() で、java.lang.ArrayIndexOutOfBoundsExceptionという例外が発生したよ!例外の発生場所はTest.javaの7行目だよ!」という意味です。 こんな感じで例外の発生場所を特定してください。 例外の知識は非常に重要であるため、どの参考書にも載っているはずです。 そちらを参考にしてみてください。

kabutorikikori
質問者

お礼

大変ありがとうございました。実際に試してみたらうまくいきました。2週間以上もわからなかった問題点がすぐにわかるようになり、本当に感謝しております。これからもわからないところが出てきた際にはよろしくお願いいたします。本当にありがとうございました。

その他の回答 (1)

  • po-net
  • ベストアンサー率36% (172/477)
回答No.1

デバッグとは、「バグをなくす」ことです。 つまり、コンパイルが通って、実際に動かない(もしくはエラーになる)のを何とかする行為のことです。 なぜこんなことが必要になるかというと、「コンパイルとは、プログラムの文法上間違いでなければ通ってしまう」という、決定的な問題があります。 例えば、こんな感じです。 class Test { public static void main(String args[]) { int[] a = {1,2,3}; a[1] = 4; System.out.println(a[5]); } } このプログラムは文法上の間違いはありません。 ですからコンパイルは通ります。 しかし、5行目では配列aの、存在しない場所を示していますね。 ですから、java.lang.ArrayIndexOutOfBoundsException という、エラー(例外)が発生します。 実際にやってみてください。 これが動作上の問題であり、 >問題なくコンパイルされるのに実際動かすとどうにも動かなくなるとき ということなのです。 ですから、プログラマーの間では、コンパイルが通ったからといって、プログラムが完成したとはいえないのが通説です。 だから動作テストというものが発生するんです。 動作テストを行って、いろんな処理をさせるうちに「例外の発生」などの予想外の処理結果が出たりします。 コレがバグであり、バグをなくして正常な動作をするようにプログラム変更する処理がデバッグなのです。 ですから、デバッグなくしてプログラムは存在しないと考えた方が良いでしょう。 こんなところでしょうか。 他に何かあれば質問してください。

kabutorikikori
質問者

補足

大変わかりやすい返事で目から鱗が落ちました。本当にありがとうございます。早速参考書をみてやってみたのですが、まずはじめにjavac -g ファイル名.javaと打ち込みその後jdb ファイル名 | moreと打ち込みました。 すると動作はするのですが、その後どのようにしていいのかわかりません。自分で書いたプログラムの中でほかのclassのメソッドを使って部分がおかしいことが解っているのですが、そのメソッド内のどこがおかしいのか解る方法を是非教えていただきたいのですが。よろしくお願い致します。

関連するQ&A

  • デバッグ苦手な人はいますか?

    新しく入った開発会社でACCESSのデバッグが使えないのを初心者と見なされたが デバッグの機能は知ってたが使うのはそもそも苦手でした。便利な機能とは思えない。 デバッグ挫折した方いますか? デバッグやコンパイルエラーは作業としては大事なのは分かりますが デバッグ苦手です。

  • java を Visual Studio でデバッグ

    java を Visual Studio でデバッグ java のプログラムを VS でステップ実行させながらデバッグすることってできるんでしょうか。 もしできるなら、どなたか、やり方をお教えください。VS2005 を使っています。 「VJ# プロジェクト」というものがあったので、「コレか?」と思って空の VJ# プロジェクトを作って、普段 jdk (SE) の javac にコンパイルさせている java プログラムのファイルを入れてみたのですが、エラーでまくりでビルドできませんでした。やっぱ、VJ# と java はちがうんですよね?きっと。 VS に限らず、「java のデバッグなら、コイツがオススメだぜ」というのがあったら、そちらを紹介して頂けるのもありがたいです。あまり高価な env は手が出ないと思いますが。 よろしくお願いします。

    • ベストアンサー
    • Java
  • デバッグ!?

    http://www.geocities.jp/tcppjp/ ↑このソフトを使用したらこんなんが出ました。 Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、 またはコンピュータ (machine.config) の構成ファイルの jitDebugging 値を system.windows.forms セクションで設定しなければなりません。 アプリケーションはまた、デバッグを有効にしてコンパイルされなければ なりません。 どうすればいいですか?? 詳しくお願いします。

  • VC++2005で、リリースモードとデバッグモードの2通りをコマンドラインで行いたい。

    VC++2005で、リリースモードとデバッグモードの2通りでコンパイルしたいのですが、GUIでなく、コマンドラインでコンパイルしたいです。 オプションで、リリースモードの時のオプションとデバッグモードの時のオプションが知りたいです。 あと作成した、DLLやEXEからこれはデバックモード、リリースモードとわかる方法が知りたいです。 32/64bitの判定は、 dumpbinコマンドで分かりました。

  • Javaでコンパイルができません。

    Javaでコンパイルができません。 コマンドプロンプトで操作しています。 コマンドプロンプトでjavacと打つと… 'javac'は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。 このように表示されてしまいます。 私にはなぜコンパイルができないのか分かりません。 分かる方がいたら、ぜひ教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • vbaとvb 「デバッグ」「ビルド」

    vbaの「デバッグ→VBAプロジェクトのコンパイル」=VB.netで言う「ビルド」、 vbaの「実行」=VB.netの「デバッグ開始」 であってますか? デバッグ=コンパイル=ビルドなのか混乱しています。 いろいろな言葉が出てきて頭がぐちゃぐちゃなので整理したいです。 よろしくお願いします。

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

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

  • ソースファイルのコンパイルができません

    コンパイルしたいファイルがある ディレクトリまで移動はできるんですが javacと入力しても 内部コマンドまたは外部コマンド 操作可能なプログラムまたはバッチファイルとして 認識されていません と出てしまいます こんな初心者ですがよろしくお願いします

    • ベストアンサー
    • Java
  • javacでのエラー

    JAVA初心者です。インターネットから「jdk-1_5_0_15-windows-i586-p.exe」をインストールしました。 その後市販の参考書をもとにテキストでテストプログラムを入力後コマンドウィンドウでJAVACを実行したところ以下のメッセージを出してコンパイルできませんでした。 ’JAVAC' は内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。 どこに問題があるのか教えてください。

    • ベストアンサー
    • Java
  • ビルドやコンパイルやデバッグと言うチェック行為

    HTMLでコードを書くにおいては ビルドやコンパイルやデバッグと言うチェック行為がないのでしょうか? エディタによってはあるのですか? そもそも ビルドやコンパイルやデバッグ がチェック行為なのかはあまりよく理解していません。

    • ベストアンサー
    • HTML

専門家に質問してみよう