gpt4 book ai didi

C++:我应该捕获所有异常还是让程序崩溃?

转载 作者:可可西里 更新时间:2023-11-01 13:26:50 27 4
gpt4 key购买 nike

我有一个用 (Visual) C++ 编写的 Windows 服务,它具有非常详细的日志记录功能,经常帮助我找到客户有时遇到的错误原因。基本上我会检查每个返回值并记录发生了什么以及错误来自何处。

理想情况下,我希望对异常具有相同级别的详细可见性(例如数组超出范围、被零除等)。换句话说:我想确切地知道异常是从哪里来的。出于可读性和实用性的原因,我不想将每隔几行代码包装到单独的 try/catch block 中。

我今天拥有的是一个通用的包罗万象的工具,它可以捕获所有内容并在关闭程序之前记录错误。从用户的角度来看这是好事 - 干净关闭而不是应用程序崩溃 - 但对我来说不好,因为我只从异常中得到一条通用消息(例如“数组超出范围”)但不知道它来自哪里。

移除包罗万象并让程序崩溃不是更好吗?我可以指示客户让 Windows 创建应用程序故障转储(如 here 所述)。使用转储文件,WinDbg 会准确指出代码中引发异常的位置。

最佳答案

您可以通过调用 AddVectoredExceptionHandler 来注册自定义的 vector 异常处理程序.

每当抛出异常时都会调用它,您可以在其中生成堆栈跟踪,然后可以将其保存以用于日志记录。

编写代码来执行此操作并非完全微不足道,但也不是火箭手术。

我个人从未用 C++ 做过,但如果没有现成的库可以在某处执行此操作,如果您没有时间或不想自己做,我会感到惊讶。

关于C++:我应该捕获所有异常还是让程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26187356/

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