gpt4 book ai didi

c++ - 在 Visual C++ 程序中每次抛出异常时,如何运行一些代码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:56 29 4
gpt4 key购买 nike

如果在 C++ 程序中抛出异常,控制将转移到异常处理程序或调用 terminate()

即使程序从处理程序内部(或从 terminate() 处理程序)发出一些可能为时已晚的诊断 - 大多数值在调用堆栈中的异常点抛出,不在处理程序中。

在 Windows 上,可以使用 [StackWalk64()] 获取调用堆栈 1功能。关键是如何在正确的时刻调用该函数。

有没有办法让 Visual C++ 程序在每次抛出异常(或未设置处理程序的异常)时执行一些用户代码?

最佳答案

如果您想在抛出 SEH 异常时执行操作,例如发生访问冲突时,那么您可以简单地捕获 SEH 异常(使用 __finally 或转换为 C++ 异常(参见 here ) ) 并访问异常中的上下文,这是抛出异常时的上下文。然后,您可以使用 StackWalker 或小型转储生成调用堆栈。恕我直言,最好生成一个小型转储。

如果您想在 C++ 异常被抛出时捕获它们,并且您无权访问 C++ 异常类的源代码,那么您需要更巧妙一些。我通过在自定义调试器下运行目标进程来处理这个问题——使用调试 API(请参阅 here ),它会在抛出异常时收到通知。此时您可以创建目标进程的小型转储或调用堆栈。

关于c++ - 在 Visual C++ 程序中每次抛出异常时,如何运行一些代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4223390/

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