InfoQ

News

Javaの実行をたどる5つ以上の方法

作者 R.J. Lorimer, 翻訳者 編集部 投稿日 2007年12月10日 午前12時56分

コミュニティ
Java
トピック
デバッグ,
パフォーマンス&スケーラビリティ
タグ
Java SE
Zviki Cohen氏(ブログ・英語)は自身の経験に基づき、自分で記述していないコードを理解、探求しながらJavaの実行を辿る5つの方法を書いた(source)。単にソースコードを読むのは(時として逆コンパイルの場合もある)大変地道でしかもエラーを招きやすい。代わりに彼は誰か他の人のコードを学ぶという不都合を排除する、Javaが実行中にJavaコードを観察する5つの方法を勧めている。下記は彼の5つの提案を要約したものである。
  1. 基礎:ブレイクポイントとステップバイステップ実行 "一番シンプルな方法で始める。ブレイクポイントを設定し実行を辿り始める。それは次のような場合にベストである。すばやくシンプルなソリューションが必要で、どこで止まらせたらいいか分かっているコードを持っている時。与えられた点において(オーギュメ ント、ローカル変数等)入念な情報が必要となる。"
  2. 最初に:デバッグメッセージ ”デバッグメッセージを設定して続ける。一番シンプルな方法はメッセージをコンソールにプリントアウトするのにSystem.out.println ステートメントを使用することである。これは次のような場合にベストである。コードを所有していて何を探しているか把握している時。イベントハンドラにはとても適したソリューションである。その高パフォーマンスがコンプレックスフローの実行時全体を通して、どのイベントがリリースされるかを理解するのを実際的なものにする。
  3. ホットスポット:動的プロキシ ”シンプルなデバッグメッセージにおける向上。デベロッパたちがプロキシクラスを導入するのを可能にするJavaの特別な機能である。これは、与えられたクラスの前に適用し、与えられたインタフェースからの全ての呼び出しを監視することができる。これは次のような場合にベスト である。イベントハンドラにとっては素晴らしいソリューションである。ダミーのイベントハンドラを数秒内にジェネリックプロキシと一緒に設定することができ、イベントのシーケンスを見ることができる。イベントハンドラを理解するのにはこれが一番シンプルで速いメソッドである。"
  4. Brute Force:ランタイムプロファイラ”プロファイラは特別なJMVフックを通してシステム内の全ての呼び出しを辿る非常に強力なツールである。でもそれは0.5インチの釘に10ポンドのハンマーを使うようなものなのである。これは次のような場合にベストである。非常に具体的なオペレーション(例:大変短い実行フロー)用の完全な画が欲しい時である。
  5. New Age:アスペクト ”アスペクト指向のプログラミング(AOP)は重要な概念である。アスペクトの概念まで掘り下げずに、結論だけに注目している。これはあなたのコードの実行を妨害するのに大変手っ取り早い方法である。オリジナルのコードを修正する必要なしにメソッド、コンストラクタ、フィールドアクセス等の周りにフックを選択的に設定することができる。このフック内でデバッグメッセージをプリントすることができる。ベストな使用目的は、再構築できるコードの実行を辿りたい時である。

2007年の2月までZviki Cohen氏はAmdocs(サイト・英語)のアーキテクトとシニアコンサルタントであったが、現在はソフトウェア業界のフリーランスである。

原文はこちらです:http://www.infoq.com/news/2007/12/5ways

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

特集コンテンツ一覧

トップスポーツチームの監督に教わる秘訣

この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。

事例研究:Dutch Railwaysのプロジェクトにおける分散拠点でのスクラム・プロジェクト

この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。

Agile2008チーム参加レポート - 帰国そして変化

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。

SilverlightとJavaのインターオペラビリティ

マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。

Agile2008 チーム参加レポート - カンファレンス参加編

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。

Agile2008 チーム参加レポート - 動機/準備編

筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。

Javaトラブルシューティングメルマガ総集編 2008/08~09

エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。

モデル駆動アプローチがうまく機能しない(しなくなる)8 つの理由

この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。