我继承了一个由许多 C#、C++/CLI 和本机 C++ 项目组成的应用程序。
该应用程序作为 MFC 应用程序启动,但在启动期间加载 CLR(通过我不确定我是否完全理解的过程†)。
我发现我可以在本机 C++ 代码中放置断点,并且可以按预期工作。但是,托管代码中的断点不起作用。
在 C# 中,我得到:
“当前不会命中断点。没有为此文档加载任何符号”。
在 C++/CLI 中,我得到:
“断点当前不会被命中。没有可执行代码与此行关联。可能的原因包括:预处理器指令或编译器/链接器优化”。
我什至可以在同一个 C++ 文件中设置两个断点并且只有一项工作,例如
#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(..)