- ベストアンサー
デバッグ中だけ、画面に出力したいときはどうすればいいでしょうか?
デバッグ中だけ、画面に出力したいときはどうすればいいでしょうか? Visual Basic では debug.print("デバッグ中") といった関数が用意されていて、デバッグ中だけ動作できたのですが、java にもこういうのがないでしょうか? #ifdef DEBUG System.out.println("デバッグ中"); #endif などとすると、これだけで3行も場所を取りますし・・。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#4の回答の public static println(String msg) の部分を public static println(Object msg) にすると 文字列(String)以外でも出力できるようになりますよ。
その他の回答 (5)
- Bonjin
- ベストアンサー率43% (418/971)
オーバーロード(多重定義)ってわかりますか? これは基本的なことなのでおさえておいてください。
補足
勉強してみます。
- Bonjin
- ベストアンサー率43% (418/971)
>具体的にどうすればよいのでしょうか? 簡単な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 クラス名 ※試していないので、まともに動かない可能性がありますのであしからず。(何となく考え方だけわかってもらえればうれしいです)
お礼
ありがとうございます。 System.getPropertyなんてワザがあったのですね。 試してみたのですが、Debug.println(10 + "かける" + 2); のように、String 以外うけつけないのでちょっと困っています。いいアイディアはないでしょうか。
- rinkun
- ベストアンサー率44% (706/1571)
一つのやり方としてDebugクラスを作成する方法があります。 まず全ての出力を無視するNullPrintStreamを作ります。これはPrintStreamクラスを継承してwrite(int)を何もしないメソッドでオーバーライドします。なお他のメソッドも全てオーバーライドした方が効率は良くなります。 Debugクラスはpublic staticメンバoutを持ち、これはNullPrintStreamで初期化しておきます。 あとはDebug.outを適切に設定するだけです。Debug時にはDebug.outがSystem.outを参照するようにします。No.1さんの要領で環境変数を見て設定するようにしても良いですし、ソースコードに手を加えても良いです。 デバッグ出力はDebug.out.printlnなどで出せます。 あと、Java用プリプロセッサは幾つか存在します。これでマクロを使う方法もあり、こちらの方が実効性能は良くなるでしょう。
補足
デバッグクラスはどこかにあるでしょうか? みなさんはどうしていますか?
ちょっとあれやけど・・・ ソースファイルをテキストファイルとして読み取り、「#ifdef DEBUG」から「#endif」の部分を除いたソースファイルを作成するソフトを作るってのはどう?
補足
うーむ、なるほど。みなさんはどうしていますか?
- Bonjin
- ベストアンサー率43% (418/971)
>#ifdef DEBUG >System.out.println("デバッグ中"); >#endif ってJavaでは使えないはずですが・・・ 特に難しいことを考えるわけではなく、環境変数等でデバッグ出力をするかどうかを切り替えるなどすればよいと思いますが・・・
補足
非常に興味があります。 具体的にどうすればよいのでしょうか?
補足
やってみました。 The method println(Object) in the type Debug is not applicable for the arguments (int) というエラーメッセージがでます・・ int aa = 2 + 3; Debug.println(aa); とやったのですが・・