【发布时间】:2018-12-16 15:36:22
【问题描述】:
我有一个用 c++ 构建的 excel xll 插件(在 xlw 的帮助下),它运行得很好,除了 excel 退出时偶尔会发生异常。
令我头疼的是,虽然它看起来像是一些析构函数问题,但我看不出哪里出了问题。
Excel 窗口刚刚关闭,然后弹出 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\10\Source\10.0.16299.0\ucrt\startup\exit.cpp,
extern "C" void __cdecl _cexit()
{
common_exit(0, _crt_exit_full_cleanup, _crt_exit_return_to_caller);
}
【问题讨论】:
-
您的某个类的全局或静态实例可能正在被破坏。这可能就是为什么您没有获得更好的调用堆栈的原因——由于正在进行全局/静态清理,运行时正在执行销毁。要么是那个,要么你的程序已经损坏了内存(当你说它运行“相当好”时),这个损坏的结果就是你现在看到的。
-
@PaulMcKenzie 可能,因为确实有很多全局变量。我怎样才能确认并找出谁是罪魁祸首?
标签: c++ excel plugins visual-studio-debugging