如何在 excel 退出期间调试 c++ excel 插件的异常

how to debug a c++ excel plugin's exception during excel exiting

我有一个用 c++ 内置的 excel xll 插件(在 xlw 的帮助下),运行 很好,除了 excel 退出,偶尔会出现异常。

令我头疼的是,虽然它看起来像是一些析构函数问题,但我看不出哪里出了问题。

Excel window 刚刚关闭,然后弹出 Windows 系统错误消息。

即使我运行它处于Visual Studio调试模式,当异常发生时,它已经在STL c++代码中,我也看不到我的代码的哪一部分,例如一个析构函数,是失败的根本原因。

准确地说,调用堆栈显示 [External Code] -> Excel.Exe -> [External Code] -> MSO.DLL ... 重复... OART.DLL ... 重复... ntdll.cll -> [External Code] -> _cexit() -> common_exit -> __acrt_lock_and_call -> ...

源可见的第一步是 exit.cpp in C:\Program Files (x86)\Windows Kits\Source.0.16299.0\ucrt\startup\exit.cpp,

extern "C" void __cdecl _cexit()
{
    common_exit(0, _crt_exit_full_cleanup, _crt_exit_return_to_caller);
}

您是否尝试过在 Visual Studio 设置中设置条件断点以中断任何异常(或您遇到的特定异常)?您可以在退出 Excel 之前启用它。这可能有助于追踪问题并在断点命中时在调用堆栈 window 中为您提供调用堆栈。

还要确保检查是否为您的代码和任何第三方依赖项加载了符号文件 (.pdb)。另一件有用的事情是指定 Microsoft public 符号服务器,以便 Microsoft 系统 pdb 的加载以及在此 article 中提到的一样。