gpt4 book ai didi

c++ - 无法使用 catch (...) 捕获 c++ 异常

转载 作者:IT老高 更新时间:2023-10-28 22:37:01 32 4
gpt4 key购买 nike

我有一个有时会引发异常的第三方库。所以我决定将我的代码包装在 try/catch(...) 中,这样我就可以记录有关异常发生的信息(没有具体细节,只是它发生了。)

但由于某种原因,代码仍然崩溃。在客户端计算机上,它会严重崩溃,并且在 catch(...) 中记录异常的代码永远不会被执行。如果我在我的调试/开发机器上运行它,我会弹出询问我是否要调试的窗口。当我这样做时,它会报告 0xC0000005:访问冲突读取位置 XXX。

奇怪的是,对于旧版本的第三方库,完全相同的代码确实会捕获异常,并且会执行记录异常的代码。 (我在 VS 中验证了这一点,观察相同的情况发生。)

这是正在执行的伪代码:

pObject = pSystem->Get_pObject()
pSystem->DoSomethingThatMightDestroy_pObject();
try
{
/* Call to third party function that is throwing exception */
pObject->SetValue(0);
}
catch (...)
{
__DEBUG_LOG_POSITION__; // A macro to log the current file line
// This code used to run in the older version of third-party library
// but the newer version just crashes before running the catch(...)
}

所以我有两个问题:

  1. 第三方编译库的方式是否发生了一些变化,以至于我的代码无法捕获异常? (是的,如果我知道要告诉他们什么,我可以让第三方进行任何必要的修复并为我重新编译。)

  2. 假设我无法让第三方修复它,我该怎么做才能捕获这些异常?我在想……有什么方法可以让我确定 pObject 是否被释放?

最佳答案

AFAIK 访问冲突不会抛出异常......至少不是标准的!

也许捕获特定于 Windows 的“ native ”异常会有所帮助:https://web.archive.org/web/20081022160935/http://www.gamedev.net/reference/articles/article2488.asp

关于c++ - 无法使用 catch (...) 捕获 c++ 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1373686/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com