2012-01-04 8 views
0

私はアプリケーションMyApp.exeを持っています。このアプリは、それ自体MyAssembly2.dllを参照しているアセンブリMyAssembly1.dllを使用しています。 MyAssembly2の中には、方法MyMethodを持つクラスMyClassがあります。このメソッドは、ユーザーがいくつかのダイアログなどを行った後に呼び出されます。メソッドがjittedされていない場合にブレークポイントを追加する方法

このアプリケーションをWindbgから起動すると、このメソッドにブレークポイントを設定する方法はありますか?問題は、MyAssembly2がCLR によってロードされ、このメソッドがJITtedになるとわからないということですか?

+0

これはコンソール/ winformsアプリですか?アセンブリに同じ名前をつけて循環参照をせずに適切に使用すると、コードに入ることができます。あなたは両方のクラスの両方から見えるコードスニペットを貼り付けることができますか? – MethodMan

+0

ほとんどのアセンブリがサードパーティーなので、コードを変更することはできません。私は、WinDbgを使用してリバースエンジニアリングによって問題を突き止めようとしています。その一部にはまだロードされていないアセンブリのこの部分にブレークポイントを設定する必要があります – imak

+1

はい、私は過去のジョブでいくつかのDelphiアプリケーションとCOMデバッグを持っています。ごめんなさいあなたの質問を理解できなかったら..良い日 – MethodMan

答えて

3

BPMDためmsdn上のドキュメントは言う

指定されたモジュールとメソッドがロードされていない場合は、モジュールがロードされ、ジャストインタイム(JIT)の前にコンパイルされた通知のため、このコマンドを待ちブレークポイントを作成します。

だからあなたが行うことができるはず!MyAssembly2.dllがまだロードされていない、それがロードするとき、デバッガがブレークポイントに置く場合でもMyAssembly2.dll MyClass.MyMethodなどをbpmd。

+1

それは私の理解についてです!bpmdも。ただし、ブレークポイントを追加すると、「追加されたブレークポイントを追加しています...」が表示されますが、ブレークポイントはヒットしないようです。私が何か間違ったことをしているかどうかわからない場合は、 – imak

+0

が正しいと思います。問題は、アセンブリが実際にロードされると、ブレークポイントがヒットしたはずのように、デバッガで実際に表示されるアセンブリ、クラス、およびメソッドです。これを行うもう1つの方法は、 "Debug-> Event Filters"に行き、 "Load Module"を処理するように変更することです。モジュールがロードされるとデバッガに侵入し、アセンブリロード時にブレークポイントを設定できます。 – jcopenha

+0

ロードされたモジュールのイベントフィルタが処理されました(実行はまだ有効です)。問題は、アセンブリがロードされたときにブレークしなかったことです。私は、アセンブリがロードされたというメッセージをwindbgに表示します。このアセンブリがロードされたときにデバッガがブレークするように設定する必要がある他の設定はありますか? – imak

1

!sosex.mbmを実行することも、ソースファイル/行番号、!sosex.mbpが分かっている場合は実行することもできます。これらのコマンドは、最初のブレークポイントで実行することもできます。 CLRがロードされるのを待つ必要はありません。 SOSEXは、必要な通知を処理して、ジッタコードが利用可能になった時点でブレークポイントを設定します。

SOSEXは無料ですhttp://www.stevestechspot.com

+0

これは、保留中のブレークポイント機能がSOSで長い間壊れているため、正解です。参照:http://naveensrinivasan.com/2010/12/05/bpmdnotworking/とhttps://windowsdebugging.wordpress.com/2012/01/08/bpmdissue/ – argaz

関連する問題