デバッグの新しい技を習得した
(2015.10.29)
描画パラメータを計算するルーチンにデバッグ・ダンプ文を挿入したところ、何故か複数回呼び出されることが判りました。オシロジのJAVAプログラムは(何度も手直しを重ねたため)些か見通しが悪くなっていて、どこから呼び出しているのかはっきりしません。
Error Exceptionが発生したときに表示されるコール・スタックを指定した箇所で表示できれば、関数の呼び出し階層を確認することができます。
先達の知恵を借りるべく、ググってみると・・・
ビンゴ~
同じようなことを考えた人が見つかりました。
いくつか回答が寄せられていましたが、その中の一つを使って見ることにしました。
new Exception("Stack trace").printStackTrace();
update_data_positionルーチンに挿入した結果がこれ(適当に編集した)です。
java.lang.Exception: Stack trace
at Main_Frame.update_data_position(Main_Frame.java:4293)
at Main_Frame.Display_PositionStateChanged(Main_Frame.java:4301)
at Main_Frame.access$2600(Main_Frame.java:16)
at Main_Frame$27.stateChanged(Main_Frame.java:624)
at javax.swing.JSlider.fireStateChanged(JSlider.java:432)
at javax.swing.JSlider$ModelListener.stateChanged(JSlider.java:350)
at javax.swing.RangeModel.fireStateChanged(RangeModel.java:364)
at javax.swing.RangeModel.setRangeProperties(RangeModel.java:302)
at javax.swing.RangeModel.setMaximum(DefaultBoundedRangeModel.java:219)
at javax.swing.JSlider.setMaximum(JSlider.java:619)
at Main_Frame.update_slider(Main_Frame.java:3920)
at Main_Frame.window_type_change(Main_Frame.java:3957)
at Main_Frame.window_button_common(Main_Frame.java:3728)
at Main_Frame.Window_1_ButtonActionPerformed(Main_Frame.java:3748)
(この下にjava.awt.EventDispatchThread関連の呼び出しが40行くらい続いている)
draw_right_posi:644>draw_max_posi:0
java.lang.Exception: Stack trace
at Main_Frame.update_data_position(Main_Frame.java:4293)
at Main_Frame.Display_PositionStateChanged(Main_Frame.java:4301)
at Main_Frame.access$2600(Main_Frame.java:16)
at Main_Frame$27.stateChanged(Main_Frame.java:624)
at javax.swing.JSlider.fireStateChanged(JSlider.java:432)
at javax.swing.JSlider$ModelListener.stateChanged(JSlider.java:350)
at javax.swing.RangeModel.fireStateChanged(RangeModel.java:364)
at javax.swing.RangeModel.setRangeProperties(RangeModel.java:302)
at javax.swing.RangeModel.setMinimum(RangeModel.java:203)
at javax.swing.JSlider.setMinimum(JSlider.java:578)
at Main_Frame.update_slider(Main_Frame.java:3921)
at Main_Frame.window_type_change(Main_Frame.java:3957)
at Main_Frame.window_button_common(Main_Frame.java:3728)
at Main_Frame.Window_1_ButtonActionPerformed(Main_Frame.java:3748)
draw_right_posi:644>draw_max_posi:0
java.lang.Exception: Stack trace
at Main_Frame.update_data_position(Main_Frame.java:4293)
at Main_Frame.window_button_common(Main_Frame.java:3729)
at Main_Frame.Window_1_ButtonActionPerformed(Main_Frame.java:3748)
表示位置を操作するスライダのMin、Maxを設定したときにStateChanged関数が呼び出され、update_data_positionルーチンが呼び出されていることが判りました。
新たなフラグを設けて、StateChanged関数からの呼び出しを制御することにすれば良さそうです。
このデバッグ技は使えます!