.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」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|