|
.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メソッドが呼び出されているのが分かる。![]()
| カテゴリ:Visual Studio .NET 処理対象:IDE 関連TIPS:文字列を数値に変換するには? |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -





