问题标签 [seh]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
920 浏览

c++ - 使用结构化异常处理 (SEH) 的后果?

我看到 Doug Harrison 很好地说明了使用(即捕获)结构化异常的“错误”(参见问题 #3)。但是还有什么其他后果?例如,如果我有几个使用 /eha 编译的项目,与使用 /ehs 编译的其他项目混合,会发生什么情况?当库相互链接(编译时或运行时)时是否存在问题?

但这只是一个例子。可能还有什么问题?

0 投票
2 回答
1949 浏览

c++ - How can I catch an invalid fgetpos call as a C++ exception on Windows?

In Visual C++ 2008, I want to "catch" an exception generated as shown here:

Here are adjustments I've made to attempt a successful catch:

  1. SEH is activated (/eha)
  2. I've added a catch(...)
  3. I've added a _set_se_translator vector.
  4. I've added/adjusted to SEH syntax: __try / __except(EXCEPTION_EXECUTE_HANDLER)

In short, I've tried "everything in the book" and I still can't catch the exception. If I replace the call to ::fgetpos with int hey = foo / 0 then suddenly all of the above techniques work as expected. So the exception I'm dealing with from ::fgetpos is somehow "extra special."

Can someone explain why this ::fgetpos error seems uncatchable, and how to work around it?

update When executed in the VS IDE, the output window doesn't name an exception. All it says is this:

Microsoft Visual Studio C Runtime Library has detected a fatal error in MyProgram.exe.

Not very helpful. When I run the console app from the command line, I get a crash dialogue. The "problem details" section of the dialogue includes this information:

Problem Event Name: BEX
Exception Offset:0002fd30
Exception Code: c0000417
Exception Data: 00000000
Additional Information 1:69ad
Additional Information 2:69addfb19767b2221c8e3e7a5cd2f4ae
Additional Information 3:b1ff
Additional Information 4:b1ffca30cadddc78c19f19b6d150997f

0 投票
2 回答
1239 浏览

c++ - SEH 错误报告

我有一个 Visual Studio 2008 C++ 程序,该程序包含在__try/__except块中以捕获任何 SEH 异常。异常过滤器会创建错误日志并为用户提供有关如何提交缺陷报告的详细说明。

过滤器中的代码是否需要包装在另一个__try/__except块中?如果不是,如果它例外会发生什么?如果有,应该如何处理?

谢谢,保罗


编辑: 如果MyFilter引发异常,那么我将进入无限异常循环。所以,看起来它确实需要__try/__except处理。我正在考虑这样做:

在这种情况下,程序应该有一个异常终止,并且应该将异常传递给操作系统来处理。那是对的吗?

0 投票
1 回答
4826 浏览

c++ - OllyDbg 无法调试 Visual Studio exe

我刚刚用这个简单的代码创建了一个新的 vc++ exe:

该应用程序非常简单,并创建了一个依赖于 kernel32.dll 和 MSVCR100D.dll 的 exe 文件。

当我尝试将其导入并调试到 OllyDbg 中时(我只想在堆栈窗口中查看 SEH 链),它显示“模块‘testseh’在代码之外有入口点(如 PE 标头中所指定)。也许这个文件是自解压或自修改,设置断点时请牢记!并且没有执行任何代码,它直接跳转到ntdll.dll崩溃部分(实际上exe正在崩溃但我无法逐步执行printf指令)

这种行为是怎么来的?exe不依赖CLI也不依赖CLR,我错过了什么吗?

0 投票
4 回答
2115 浏览

windows - 查找另一个线程的线程信息块

有没有办法找到在您的进程中运行的另一个线程的线程信息块 (TIB)?

我需要为另一个线程构造一个异常处理程序,但我不能在线程本身中做到这一点。因此我需要找到它的 TIB 并从另一个线程中构建它。我怎样才能做到这一点?

0 投票
2 回答
1809 浏览

c - 捕获操作码 0xCC 作为异常

假设 C 程序可能会触发操作码异常,0xCC
我该如何捕捉它?

我试过:

这对我不起作用。我究竟做错了什么?谢谢!

0 投票
2 回答
1783 浏览

c++ - 在 Visual Studio 2010 中混合异常处理模型的后果是什么?

我有第三方静态库,Enable C++ Exceptions设置为No/EH未指定标志)。从启用 C++ 异常的代码中调用它会有什么后果(/EHa)?如果从库中抛出结构化异常,主应用程序提供给 _set_se_translator 的函数是否会被可靠地调用?(我的实验表明它会,但只是想知道这是否是定义的行为)。

/EH混合异常处理模型时还有其他注意事项吗?

0 投票
3 回答
2894 浏览

c++ - 混合 C++ 异常处理和 SEH (windows)

我有一个函数,我调用它getaddrinfo()来获取sockaddr*系统分配的目标内存。许多人可能知道,您需要调用freeaddrinfo()以释放由 getaddrinfo() 分配的内存。

现在,在我的函数中,有几个地方我可能会抛出异常,因为某些函数失败了。我的第一个解决方案是将其合并freeaddrinfo()到每个 if 块中。但这对我来说确实很难看,因为无论如何我都必须在函数返回之前调用它,所以我想出了 SEH 的 try-finally ......

但是我遇到的问题是,不允许将 throw-statements 编码到 __try-block

然后,我在 msdn 上阅读并尝试将 throw 语句交换到从 __try-block 中调用的辅助函数中......瞧,编译器不再抱怨它了......

这是为什么?这安全吗?这对我来说没有意义:/

代码:

编辑:

尝试了以下方法,它适用于抛出一个整数,但当我使用一个类作为异常时不起作用:

为什么?:/

0 投票
3 回答
1057 浏览

c++ - C/C++ SEH 示例构建失败

我对 c/c++ 完全不熟悉。我需要编译一个小程序来做一些分析。

这是程序

我在 Dev C++ 4.9.9.2 上编译。这些是我得到的错误

知道这段代码有什么问题吗?

0 投票
3 回答
1660 浏览

delphi - 结构化异常处理程序和 Delphi

我试图在SEH不使用的情况下进行设置try except
(这是我个人的知识,以便更好地了解 SEH 的工作原理)

以下代码不起作用

但这确实

我究竟做错了什么?第一个代码和第二个代码有什么区别?