• ベストアンサー

デバッグ中だけ、画面に出力したいときはどうすればいいでしょうか?

デバッグ中だけ、画面に出力したいときはどうすればいいでしょうか? Visual Basic では debug.print("デバッグ中") といった関数が用意されていて、デバッグ中だけ動作できたのですが、java にもこういうのがないでしょうか? #ifdef DEBUG System.out.println("デバッグ中"); #endif などとすると、これだけで3行も場所を取りますし・・。

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

  • ベストアンサー
回答No.5

#4の回答の public static println(String msg) の部分を public static println(Object msg) にすると 文字列(String)以外でも出力できるようになりますよ。

white-tiger
質問者

補足

やってみました。 The method println(Object) in the type Debug is not applicable for the arguments (int) というエラーメッセージがでます・・ int aa = 2 + 3; Debug.println(aa); とやったのですが・・

その他の回答 (5)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.6

オーバーロード(多重定義)ってわかりますか? これは基本的なことなのでおさえておいてください。

white-tiger
質問者

補足

勉強してみます。

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.4

>具体的にどうすればよいのでしょうか? 簡単なDebugクラスの例ですが、 public class Debug {  private static boolean debug = false;  static{   if(System.getProperty("debug", "off").equals("on")){debug = true;}  }  public static println(String msg){   if(debug){System.out.println(msg);}  } } ソース内で Debug.println("デバッグメッセージ"); 等のように使用します。 実行する時にシステムプロパティを指定してください。 java -Ddebug=on クラス名 ※試していないので、まともに動かない可能性がありますのであしからず。(何となく考え方だけわかってもらえればうれしいです)

white-tiger
質問者

お礼

ありがとうございます。 System.getPropertyなんてワザがあったのですね。 試してみたのですが、Debug.println(10 + "かける" + 2); のように、String 以外うけつけないのでちょっと困っています。いいアイディアはないでしょうか。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

一つのやり方としてDebugクラスを作成する方法があります。 まず全ての出力を無視するNullPrintStreamを作ります。これはPrintStreamクラスを継承してwrite(int)を何もしないメソッドでオーバーライドします。なお他のメソッドも全てオーバーライドした方が効率は良くなります。 Debugクラスはpublic staticメンバoutを持ち、これはNullPrintStreamで初期化しておきます。 あとはDebug.outを適切に設定するだけです。Debug時にはDebug.outがSystem.outを参照するようにします。No.1さんの要領で環境変数を見て設定するようにしても良いですし、ソースコードに手を加えても良いです。 デバッグ出力はDebug.out.printlnなどで出せます。 あと、Java用プリプロセッサは幾つか存在します。これでマクロを使う方法もあり、こちらの方が実効性能は良くなるでしょう。

white-tiger
質問者

補足

デバッグクラスはどこかにあるでしょうか? みなさんはどうしていますか?

noname#16765
noname#16765
回答No.2

ちょっとあれやけど・・・ ソースファイルをテキストファイルとして読み取り、「#ifdef DEBUG」から「#endif」の部分を除いたソースファイルを作成するソフトを作るってのはどう?

white-tiger
質問者

補足

うーむ、なるほど。みなさんはどうしていますか?

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

>#ifdef DEBUG >System.out.println("デバッグ中"); >#endif ってJavaでは使えないはずですが・・・ 特に難しいことを考えるわけではなく、環境変数等でデバッグ出力をするかどうかを切り替えるなどすればよいと思いますが・・・

white-tiger
質問者

補足

非常に興味があります。 具体的にどうすればよいのでしょうか?

関連するQ&A