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+,
slashdot+
Hatena

特集コンテンツ一覧

アジャイルにおけるプロジェクトマネジャーの役割

この記事では最初に一般的に産業界でのプロジェクトマネージャーの役割について説明し、それから、アジャイルにおけるコーチ/ファシリィテーターの役割にあてはめてみます。

アレグザンダー祭りにて、James.O.Coplienが語るアジャイルとスクラムの源流とは

「パターン」と呼ばれる設計手法をご存知ですか?この建築の分野ではじまった設計の形式知化手法、および、使う人と作る人の対話のプロセスは、私たちソフトウェアの世界に援用されて1995年に「デザインパターン」という書籍で注目を浴びました。さらに、アジャイルと呼ばれる開発手法には、ユーザーといっしょに対話をしながら設計を進める「パターン」の思想が脈々と引き継がれているのです。

仮想パネル:ソフトウェアアーキテクチャの文書化について

この仮想パネルでは、特に、アジャイルソフトウェア開発環境におけるソフトウェアアーキテクチャの文書化について、Len Bass氏、Grady Booch氏、Paulo Merson氏、Eoin Woods氏に話を聞いた。

HTTPSコネクションの最初の数ミリ秒

HTTPSコネクションを確立するとき、一体何が起こっているのだろう。この記事では安全なコネクションを準備するためにクライアントとサーバの間でどのようなデータの交換が行われているのか、バイトレベルまで詳細に分析する。

Modular Java:動的なモジュール化

Modular Javaシリーズの第3弾は、動的なモジュール化、どのようにバンドルのクラスが解決され、どのように生成され、消滅するのか、どのようにお互いに通信するのかについて、議論する。

分散バージョン管理システムの詳細なガイド

分散バージョン管理システムへの関心や採用は増え続けています。この記事では、分散バージョン管理システムのコンセプトを紹介し、git、Mercurial、Bazaarの3つについて詳しく見てみようと思います。

Modular Java:それは何なのか?

ここ数年にわたって、Javaのモジュール化は活発に議論され続けている話題である。いくつかのJSRによってJavaの進化におけるモジュール化の必要性が示されている。モジュール化の意味するところは何で、なぜそれを気にかけるべきなのだろうか?

Modular Java:静的なモジュール化

Modular Javaシリーズの第2弾は、静的なモジュール化、バンドルの作り方、OSGiのエンジンにそれらをインストールする方法、バンドル間の(バージョン付き)依存性の設定のしかたなどについて扱う。