.NET TIPS

クラス・ライブラリ内部で呼び出されているメソッドを調べるには?

デジタルアドバンテージ
2003/09/12

 .NET Frameworkのクラス・ライブラリでは、同じ1つの処理を行う場合でも、使用するクラスや、オーバーロードされたメソッドのバージョンによってさまざまな記述方法があり得る。例えば「TIPS:文字列を数値に変換するには?」の最後にあるように、Convert.ToInt32メソッドはその内部でInt32.Parseメソッドを呼び出している。このためどちらのメソッドを使用しても同じように文字列を数値に変換することができる。こういったクラス・ライブラリ内部の情報は、ソース・コードが公開されていないため、逆アセンブラであるildasm.exeなどを使用してアセンブリの内部を覗かないと分からない事実である。しかしクラス・ライブラリ内部でのメソッドが順に呼び出されていく様子は、Visual Studio .NET(以下VS.NET)のデバッグ機能の1つである「呼び出し履歴」を「混合モード」で使用することにより確認することができる。

 例えば、VS.NETで「コンソール・アプリケーション」の新しいプロジェクトを作成して次のようなコードを記述し、doitメソッドの呼び出し部分にブレークポイントを設定したとする。

Visual Studio .NETでコードにブレークポイントを設定

 この状態でデバッグ実行を開始し、[ステップイン]ボタンや[F11]キーで実行を進めていけばコードは1行ずつ実行され、[呼び出し履歴]ウィンドウには呼び出されたメソッドの履歴が表示されていく。

ステップイン実行
[呼び出し履歴]ウィンドウには呼び出されたメソッドの履歴が表示される。

 ただし、このときトレースできるコードや表示される履歴はプログラマーが記述したメソッドの呼び出しのみである。

 再度デバッグを開始し、今度は実行を進める前にエディット画面をマウスで右クリックして[混合モードを表示]を選択するか、メニューから[デバッグ]−[ウィンドウ]−[混合モード]を選択する。混合モードはCPUが実際に実行を行うネイティブなx86のアセンブラ・コードを表示するモードである。

 混合モードでステップイン実行を行うとx86のアセンブラ・コードが1行ずつ実行されていくが、この場合にはプログラマーのコードとクラス・ライブラリのコード(DLLファイル内のコード)の区別なくトレースすることができる。このため[呼び出し履歴]ウィンドウでは、実行中のアセンブラ・コードに対応するモジュールとクラス名、メソッド名を知ることができる。

混合モードでのステップイン実行
混合モードではクラス・ライブラリの内部までトレースすることができる。このため[呼び出し履歴]ウィンドウにはクラス・ライブラリ内部でのメソッドの呼び出し履歴を確認することができる。

 呼び出し履歴を見ると、確かにConvert.ToInt32メソッドの内部でInt32.Parseメソッドが呼び出されているのが分かる。End of Article

カテゴリ:Visual Studio .NET 処理対象:IDE
関連TIPS:文字列を数値に変換するには?
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET AJAX]AJAX対応ページで[戻る]ボタンを有効にするには?(クライアントサイド編)[3.5、C#、VB]
[ASP.NET AJAX]AJAX対応ページで[戻る]ボタンを有効にするには?(サーバサイド編)
[ASP.NET]ページから生成されたソース・コードを見るには?
文字列を数値に変換するには?
デバッグ時にメソッドをステップイン実行しないようにするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH