2011-02-04 22 views
9

実行時に実行中のアプリケーションでDLLをホットロードする方法を解明した後で(私のprevious postを参照)、新しく読み込まれたDLLに挿入されたブレークポイントはヒット。ランタイムで別のAppDomainから動的にロードされたDLLをデバッグする

状況
私は終了/再実行されている。ここ
がある私は(リフレクションによって)動的にロードされたDLLに変更を加えるたびに

目標を避けたいサーバーアプリケーションを持っています私は何をしようとしています(私はこれができない場合があります認識しています自体):

  • 実行Application.exe
  • それにロードnewAppDomainでProcess.dll及び実行プロセス
  • デバッグProcess.dll
  • アンProcess.dll
  • 編集処理コード、Process.dll
  • を再コンパイル動的に再ロードしてくださいApplication.exe
  • デバッグPro cess.dll
  • 等...

問題
私はApplication.exeは、デバッグモードで起動したときに、別のAppDomainからロードされたコードが接続デバッガによって到達不能であることに気づきましたApplication.exe (私は、実行可能ファイルから直接Application.exeを起動すると、私は推測する、何かをデバッグするデバッガVS取得する方法が新たにロードされたDLLをinluding、ありません)

Prossible回避策
回避策(醜い)ソリューションは、別の実行可能ファイルに実行されているアプリにDLLの「注入」を分離することである、それはVSデバッガで、その後、監視可能になり

私は少し混乱してい認めるMUS 。 効率的でクリーンなアイデアはありますか?

+0

これは非常に奇妙です。私はセカンダリアプリドメインにアプリケーションをロードするアプリケーションサーバを持っており、ブレークポイントの設定に問題はありません。 Process.dllファイルは、Application.exeの起動に使用するソリューションのクラスプロジェクトの出力ですか? –

+0

あなたの参照している質問のように、アセンブリのアンロードに関する問題は解決していないようです。その場合、デバッグシンボルが一致しないため、コードが破損することはありません。 –

+0

あなたのアプリケーションがdllをロードしている場所は、dllがデバッグモードでビルドされている場所ではない可能性があります。 – Asher

答えて

1

現在、ブレークポイントを持つDLLにSystem.Diagnostics.Debugger.Break()を入れても、ブレークが正しくスローされますか?

http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.break.aspx

ない場合、私はそのアンロードが失敗している、またはあなたが考えているよりも別のライブラリをロードしている、サムに同意に傾いています。

1

他のプロジェクトにDLLへの参照を追加すると、「注入された」アセンブリをデバッグすることが可能になりました。このように私のソリューションは展開しませんが、安定したコードで問題を解決するために、少なくとも注入するコードをデバッグすることができました。これは、アセンブリID(またはそれに類するもの)を決定するときにIDEが参照を参照することを示しています。DebugBreak()このシナリオでは何も実行しませんが、参照が追加されていないとVSデバッガは通知されません。私はテストはしませんでしたが、他のどのデバッガでもうまくシグナルが送られたと想像していましたので、再度IDEがシグナルを明示的に無視していることを示唆しています。

ベテランの.NET開発者言い換えると、この問題は私には新しいものです。 Windows 2000、VS.NET 2001-2002と同じテストコードをロードすれば、ブレーク信号がうまくいくということは安全だと言えます。

OPの前の投稿に基づいて、同じアセンブリであっても、異なる場所/メカニズムからロードされている場合でも、ロードされているアセンブリが実際には別個のIDでロードされている可能性が高くなりますユニークなアセンブリとして、結果的にIDEもそうです。

一部の読者は、特定のシナリオで、同じアセンブリがappdomain間で読み込まれていて、同じアセンブリが複数回読み込まれていることに気づいた場合、値がLoaderOptimizationになることがあります。

誰か、私は約1時間困惑しました。ありがとう。

+0

あなたの洞察に感謝します。興味深い解決策。 –

関連する問題