Java 06 - スタッククロールに行番号が表示されない問題
(1999 年 2 月 22 日)
Q: 例外がコンソールに出力されたり、 mrj の“dcmd”を使ったときに現れる Java スタッククロールで、一部またはすべてのメソッドに対するソースの行番号が表示されません。行番号を表示し、問題をデバッグできるようにするにはどうすればよいですか。
A: これには 2 つの理由が考えられます。最も可能性が高いのは、メソッドが JIT によってネイティブコードに変換されたということです。この場合、ソースのファイル名と行番号が表示されるべき場所に (Compiled code) というフレーズが表示されます。デバッグを実行中で、どうしても行番号が必要な場合は、JIT を無効にしてください。詳しくは、 Q&A - Java 05「IT を無効にする方法」を参照してください。
(Compiled code) というテキストがない場合、または JIT が無効になっているのに行番号が表示されない場合は、Java コンパイラがクラスをコンパイルするときに、ソースファイルと行番号のテーブルを省略しています。これはコンパイラの設定によるもので、変更が可能です。このオプションをオンにして再コンパイルすると、問題が解決します。ただし、これらのテーブルを含めないと、コンパイル後のコードが格段に小さくなります。MRJ SDK に付属の javac コンパイラを使っている場合は、“Debugging tables”チェックボックスを使って設定を変更します。Metrowerks CodeWarrior を使っている場合は、すべてのソースファイルに対するデバッギングドット (バグアイコンの下の列の中にある) がオンになっていることを確認してから再コンパイルします。また、Metrowerks のコンパイラで最適化とインラインをオンにすると、行番号が正確でなくなったり、乱れることがあるので注意してください。
Jens Alfke
Java Toolkit Engineer
Levi Brown
Worldwide Developer Technical Support
|