Javaでのデバッグ

ようやくReverseTCPリンク(単にConnect側がReceiverになるだけ)とRelayリンク(メッセージをL7で中継)が完成。
割とバグが多くて直す仮定でエンバグするという、もうカオスな状態に。
と、いうことで今回得た経験。

EclipseのDebug機能は当てにしない

  • Breakpointで止まらない現象が頻発(Ubuntuだから?)
  • Build Cleanすると直る時もあれば直らないときもあり
  • オブジェクトの中身が見られないことなんて日常茶飯事(これはよくある)

transientは慎重に

  • オブジェクトをSerializeするときのtransientを付けるときは慎重に
  • なるべくreadObjectメソッド内でnewする

Concurrency処理も慎重に

  • Concurrentクラスを使う処理はデバッグをしっかりする
  • あまりにも衝突が頻発するならsynchronizedした方が良いかも?
  • スレッドに名前を付けることでEclipseのDebugで覗いた時に楽になる(でもあてにしない)

throw new RuntimeException()を使う

  • accert的エラーが出たときはthrow new RuntimeException()ってやることでどこで起きたかトレースできる
  • たぶんもっと良い方法がある

まぁ、何はともあれ動くことは動いたので、後はちくちくバグを取っていく感じ。
早く論文書かねば・・・。