多数のC#、C ++ / CLI、およびネイティブC++プロジェクトで構成されるアプリケーションを継承しました。
アプリはMFCアプリケーションとして起動しますが、起動時にCLRを読み込みます(プロセスを介して、まだ完全に理解しているかどうかはわかりません†)。
ネイティブC++コードにブレークポイントを配置でき、これらは期待どおりに機能することがわかりました。ただし、マネージコードのブレークポイントは機能しません。
C#では次のようになります。
「現在、ブレークポイントはヒットしません。このドキュメントのシンボルはロードされていません」。
C ++/CLIでは次のようになります。
「現在、ブレークポイントはヒットしません。この行に実行可能コードは関連付けられていません。考えられる原因には、プリプロセッサディレクティブまたはコンパイラ/リンカーの最適化が含まれます。」
同じC++ファイルに2つのブレークポイントを設定して、作業を1つだけにすることもできます。
#pragma unmanaged
int CMyClass::UnmanagedFunc()
{
// Breakpoint here works
return 1
}
#pragma managed
int CMyClass::ManagedFunc()
{
// Breakpoint here DOES NOT WORK!!
return 2
}
「アンマネージコードのデバッグを有効にする」(マネージライブラリプロジェクト内)のプロジェクト設定は、これらのブレークポイントには影響しません。コードベースの管理された部分を中断してステップスルーできるようにするために行う設定や構成などはありますか?
†:プロセスはをロードし、、、、、、およびをmscoree.dll
含む複雑なルーチンをCLRCreateInstance
含みます。ICLRMetaHost
ICLRRuntimeHost
GetRuntime(..)
Start()
ExecuteInDefaultAppDomain(..)