structured-exception相关内容
通常访问冲突会终止程序,我无法使用 try 和 catch 捕获 Win32 异常.有没有办法让我的程序保持运行,即使发生访问冲突?最好我想处理异常并向用户显示发生了访问冲突. 编辑:我希望我的程序非常健壮,甚至可以防止编程错误.我真正想要避免的是程序终止,即使以某些损坏的状态为代价. 解决方案 在 Windows 中,这称为结构化异常处理 (SEH).有关详细信息,请参阅此处:
..
如果堆栈跨越内核边界,为什么 64 位 Windows 不能在异常期间展开堆栈——而 32 位 Windows 可以? 整个问题的上下文来自: OnLoad异常消失的案例——x64中的用户模式回调异常 背景 在 32 位 Windows 中,如果我在 用户模式 代码中抛出异常,该异常是从 内核模式 代码回调的,该代码是从我的 调用的>用户模式代码,例如: 用户模式内核模式
..
我有一个函数,我调用 getaddrinfo()获取一个 sockaddr * 哪个目标内存被分配由系统。 许多人知道,你需要调用$ code freeaddrinfo()来释放由getaddrinfo()分配的内存。 现在,在我的函数中,有几个地方,我可能会抛出一个异常,因为一些函数失败。 我的第一个解决方案是将 freeaddrinfo()并入每个if-block。 但是对我而言看
..
通常,访问冲突终止程序,我无法使用 try 和 catch 捕获Win32异常。有没有办法让我的程序运行,即使在访问冲突的情况下呢?最好我想处理这个异常并向用户显示发生访问冲突。 编辑:我希望我的程序非常强大,甚至编程错误。我真的想避免的是一个程序终止,即使是一些损坏的状态的代价。 解决方案 在Windows中,这称为结构化异常处理(SEH)。详情请见: http://msdn
..
我正在尝试写一个未处理的异常过滤器(请参阅SetUnhandledExceptionFilter())与Windows SEH一起使用来报告无效的浮点运算。我想捕获异常,打印一个堆栈跟踪,然后禁用浮点异常并恢复执行结果的非有限或非数字值。 我在下面写了简单的程序来演示捕获异常并恢复执行的能力。注意使用#ifdef _WIN64,因为ContextRecord的定义根据目标架构而改变(WIN3
..
解决方案 他们是Win32等效于Unix信号,让您捕获CPU异常,例如访问冲突,非法指令,除以零。 使用正确的编译器选项(/ Visual C ++的EHa),C ++异常使用相同作为堆栈展开的机制适用于C ++(用户)异常和SEH(OS)异常。 与C ++异常不同,SEH不是键入的,但都共享相同的数据结构它有一个异常代码(原因)以及关于什么代码故障以及在发生故障时保持的CPU寄存器
..
背景 我有一个应用程序使用“Poof-Crash” [ 1 ]。我相当肯定是由于一个吹起的堆栈。 应用程序是多线程的。 我正在使用““ 我已经写了一个SE翻译器函数,并调用了 _set_se_translator()。 我已经编写了函数并设置 set_terminate()和 set_unexpected()。 要获取堆栈溢出,我必须运行在释放模式,在重负载下,几天。在调试器下运行
..
我想了解非管理的用户模式Windows进程可能“崩溃”的方式(这是一个非常全面的术语)。 这里是我迄今为止知道的方式: 未处理的结构化异常 默认UnhandledExceptionFilter:pre-Vista中的postmortem调试器; WerFault in Vista + Custom UnhandledExceptionFilter:可以做任何喜欢的事,包括安静地
..
背景 我有一个包含崩溃 [ 1 ]。我相当肯定,这是由于一个堆栈。 应用程序是多线程的。 我正在使用“启用C ++异常:是使用SEH异常(/ EHa)”编译。 我写了一个SE翻译器函数,并且用它来调用 _set_se_translator()。 set_terminate()和 set_unexpected()。 ,我必须在释放模式下运行,在重负载下,几天。在调试器下运行不是一个选
..
解决方案 它们是Win32等同于Unix信号, 使用正确的编译器选项(/ EHa for Visual C ++),C ++异常使用相同的 与C ++异常不同,SEH不是类型化的,而是共享相同的数据结构其具有异常代码(原因)和关于什么代码故障以及在故障时CPU寄存器保存的附加信息。请参见 GetExceptionCode 和 GetExceptionInformation 此外
..
为什么不能在64位Windows异常期间展开堆栈,如果堆栈穿过内核的边界 - 当32位Windows能 这整个问题的背景来源于: 背景 在32位Windows,如果我扔在我的用户模式的code的异常,这是所谓的内核模式的code回首,那从我的用户模式的code的调用,如: 用户模式内核模式 ------------------ ------------------- CreateWindo
..