启用"Native code debugging"会在 Outlook 加载项中引发 ntdll.dll 异常



我有一个用C#构建的用于Outlook的VSTO加载项。它引用了在VC++中构建的其他DLL。我所有的VC++DLL都已将调试类型设置为";仅限本机";而不是";自动";。现在我正试图启用选项";启用本机代码调试";对于我的VSTO Addin;项目设置\调试\调试器引擎"但是,当我启用它并启动VSTO Addin来调试它时,会抛出一些与ntdll.dll相关的错误消息:

Exception thrown at 0x00007FFA5355FCBC in OUTLOOK.EXE: Microsoft C++ exception: windows_exception_impl<0> at memory location 0x000000000014E3A8.
Exception thrown at 0x00007FFA5355FCBC in OUTLOOK.EXE: Microsoft C++ exception: windows_exception_impl<0> at memory location 0x000000000014E3A8.
'OUTLOOK.EXE' (Win32): Loaded 'C:WindowsSystem32oleaut32.dll'. Symbols loaded.
OUTLOOK.EXE has triggered a breakpoint.
Exception thrown at 0x00007FFA57B81083 (ntdll.dll) in OUTLOOK.EXE: 0xC00000AA: An attempt was made to execute an instruction at an unaligned address and the host system does not support unaligned instruction references.
Exception thrown at 0x00007FFA57C68404 (ntdll.dll) in OUTLOOK.EXE: 0xC0000005: Access violation reading location 0x0000000000000000.
Unhandled exception at 0x00007FFA57B81083 (ntdll.dll) in OUTLOOK.EXE: 0xC00000AA: An attempt was made to execute an instruction at an unaligned address and the host system does not support unaligned instruction references.

如果我禁用";启用本机代码调试";VSTO Addin工作良好,没有问题。我的VSTO加载项已将调试设置为配置,将x64设置为平台。

错误消息中给出了答案:

0xC00000AA:试图在未对齐的地址执行指令,而主机系统不支持未对齐的指令引用。

Outlook不允许使用未对齐的地址进行调试。您可以在C/C++中的Unaligned accesss:what,why and solutions to do it properly一文中了解更多关于这一点的信息。

最新更新