如何在 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 中提到的一样。
我有一个用 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 中提到的一样。