structured-exception相关内容

如何处理 Visual Studio C++ 中的访问冲突?

通常访问冲突会终止程序,我无法使用 try 和 catch 捕获 Win32 异常.有没有办法让我的程序保持运行,即使发生访问冲突?最好我想处理异常并向用户显示发生了访问冲突. 编辑:我希望我的程序非常健壮,甚至可以防止编程错误.我真正想要避免的是程序终止,即使以某些损坏的状态为代价. 解决方案 在 Windows 中,这称为结构化异常处理 (SEH).有关详细信息,请参阅此处: ..

为什么 64 位 Windows 不能解除用户-内核-用户异常?

如果堆栈跨越内核边界,为什么 64 位 Windows 不能在异常期间展开堆栈——而 32 位 Windows 可以? 整个问题的上下文来自: OnLoad异常消失的案例——x64中的用户模式回调异常 背景 在 32 位 Windows 中,如果我在 用户模式 代码中抛出异常,该异常是从 内核模式 代码回调的,该代码是从我的 调用的>用户模式代码,例如: 用户模式内核模式 ..

混合c ++异常处理和SEH(窗口)

我有一个函数,我调用 getaddrinfo()获取一个 sockaddr * 哪个目标内存被分配由系统。 许多人知道,你需要调用$ code freeaddrinfo()来释放由getaddrinfo()分配的内存。 现在,在我的函数中,有几个地方,我可能会抛出一个异常,因为一些函数失败。 我的第一个解决方案是将 freeaddrinfo()并入每个if-block。 但是对我而言看 ..
发布时间:2017-10-01 15:33:11 C/C++开发

如何处理Visual Studio C ++中的访问冲突?

通常,访问冲突终止程序,我无法使用 try 和 catch 捕获Win32异常。有没有办法让我的程序运行,即使在访问冲突的情况下呢?最好我想处理这个异常并向用户显示发生访问冲突。 编辑:我希望我的程序非常强大,甚至编程错误。我真的想避免的是一个程序终止,即使是一些损坏的状态的代价。 解决方案 在Windows中,这称为结构化异常处理(SEH)。详情请见: http://msdn ..

在WIN32和WIN64中配置浮点单元上下文

我正在尝试写一个未处理的异常过滤器(请参阅SetUnhandledExceptionFilter())与Windows SEH一起使用来报告无效的浮点运算。我想捕获异常,打印一个堆栈跟踪,然后禁用浮点异常并恢复执行结果的非有限或非数字值。 我在下面写了简单的程序来演示捕获异常并恢复执行的能力。注意使用#ifdef _WIN64,因为ContextRecord的定义根据目标架构而改变(WIN3 ..
发布时间:2017-09-30 23:33:32 其他开发

关于C ++中的结构化异常(SEH)应该知道什么?

解决方案 他们是Win32等效于Unix信号,让您捕获CPU异常,例如访问冲突,非法指令,除以零。 使用正确的编译器选项(/ Visual C ++的EHa),C ++异常使用相同作为堆栈展开的机制适用于C ++(用户)异常和SEH(OS)异常。 与C ++异常不同,SEH不是键入的,但都共享相同的数据结构它有一个异常代码(原因)以及关于什么代码故障以及在发生故障时保持的CPU寄存器 ..

如何保证在Visual Studio 2005下在C ++中捕获EXCEPTION_STACK_OVERFLOW结构化异常?

背景 我有一个应用程序使用“Poof-Crash” [ 1 ]。我相当肯定是由于一个吹起的堆栈。 应用程序是多线程的。 我正在使用““ 我已经写了一个SE翻译器函数,并调用了 _set_se_translator()。 我已经编写了函数并设置 set_terminate()和 set_unexpected()。 要获取堆栈溢出,我必须运行在释放模式,在重负载下,几天。在调试器下运行 ..

非托管Windows进程崩溃的方法?

我想了解非管理的用户模式Windows进程可能“崩溃”的方式(这是一个非常全面的术语)。 这里是我迄今为止知道的方式: 未处理的结构化异常 默认UnhandledExceptionFilter:pre-Vista中的postmortem调试器; WerFault in Vista + Custom UnhandledExceptionFilter:可以做任何喜欢的事,包括安静地 ..
发布时间:2017-01-13 12:32:34 其他开发

我如何保证在Visual Studio 2005中捕获C ++中的EXCEPTION_STACK_OVERFLOW结构化异常?

背景 我有一个包含崩溃 [ 1 ]。我相当肯定,这是由于一个堆栈。 应用程序是多线程的。 我正在使用“启用C ++异常:是使用SEH异常(/ EHa)”编译。 我写了一个SE翻译器函数,并且用它来调用 _set_se_translator()。 set_terminate()和 set_unexpected()。 ,我必须在释放模式下运行,在重负载下,几天。在调试器下运行不是一个选 ..

关于C ++中的结构化异常(SEH)我应该知道什么?

解决方案 它们是Win32等同于Unix信号, 使用正确的编译器选项(/ EHa for Visual C ++),C ++异常使用相同的 与C ++异常不同,SEH不是类型化的,而是共享相同的数据结构其具有异常代码(原因)和关于什么代码故障以及在故障时CPU寄存器保存的附加信息。请参见 GetExceptionCode 和 GetExceptionInformation 此外 ..

为什么不能在64位Windows放松身心的用户内核用户异常?

为什么不能在64位Windows异常期间展开堆栈,如果堆栈穿过内核的边界 - 当32位Windows能 这整个问题的背景来源于: 背景 在32位Windows,如果我扔在我的用户模式的code的异常,这是所谓的内核模式的code回首,那从我的用户模式的code的调用,如: 用户模式内核模式 ------------------ ------------------- CreateWindo ..
发布时间:2015-11-28 12:03:47 其他开发