これまで何もしていない状況で立ち往生したことがあります。私は実際に行って、正しい方法に落としてしまえば、他のすべての行を挿入しました。
(たとえば、例外をスローしたRMI呼び出しが静かに鳴り、呼び出し元のスレッドが無期限にハングしたJVMで作業していたのです!もちろん、デバッガを使用できませんでした。あなただけの助けにはなりませんEVERYWHEREデバッグ出力を挿入し、プログラムを実行している、とにかく??)
ことがわかります。あなたは、出力のページを分析して失われます。代わりに、問題が発生している箇所を括弧で括って手動で出力行を挿入してください。
あなたのスレッドが1行で "消滅"したり、予期しないターンをした場合、その行を最小限の実行可能な部分に分割し、どの部分が失敗しているかを把握し、 。ところで
、別の有用なツール - でも非常に古いJVM上で、あなたが投げることができる任意の時点で「(新しい例外())のprintStackTrace();。」プログラムの流れに影響を与えずにスタックをダンプします。あなたが自分の場所にいることがわかっていて、そこにいかに乗っているのかわからない場合は、これが役に立ちます。
最後に、本当に怠惰になりたい場合は、単一の静的メソッドを使用してすべてのデバッグ出力(System.out.printlnに委任したもの)を実行し、スタックトレースを取得するために2行追加して、 "呼び出し"行/メソッドだけを取得し、debug文の前に出力して、貧しい人のログユーティリティを提供してください。
私は組み込みプラットフォーム上でJavaの古いバージョンをいじっの年から学んだだけでいくつかの手動デバッグトリック。私はキースに同意
を見てください。 現時点では、デバッガを使用してコードをステップ実行することはできません(システムのデバッグサポートは当分中断されています)ので、印刷物に頼らざるを得ません。私はこれを行うには恐ろしい方法だが、それにもかかわらず私が試してみたいことはよく知っている。 –
この場合、おそらく、AOPのある種の並べ替えを使用して、各メソッド呼び出しでアドバイスを織り交ぜて前後のステートメントを印刷できますか?それが組み込みデバイスのオプションであるかどうかは不明です。 –
System.out.println()ではなくlog4jを調べる必要があります。挿入を自動化するのに役立つことはありませんが、一度それらの行が存在すると、はるかに多くのコントロールを得ることができます。 – PanCrit