c++ - JIT 编译器和异常处理

标签 c++ windows exception-handling 64-bit

在 Windows x64 上,假设有一个包含三个函数的调用链:

function A, written in C++
function B, generated by a JIT compiler
function C, written in C++

A 调用 B,B 调用 C,然后 C 抛出一个被 A 捕获的异常。B 只是直线代码;它从不抛出或捕获任何异常,也不包含任何析构函数。

http://msdn.microsoft.com/en-us/library/ms235286(v=vs.80).aspx说 B 必须使堆栈对齐到 16 个字节,这很好。它还说必须向 B 提供展开数据,但不清楚该数据应包含什么或如何提供。

在这种情况下 B 实际上不需要进行任何展开,它是否仍然必须有一个空的展开数据 block ,或者您可以忽略它并让异常静默地传递给 B ?

最佳答案

您确实需要展开数据 as this article explains :

even if you just have a tiny little function that only calls another function, you still need unwind data, or when an exception occurs, your process will simply be terminated.

format of the unwind data is documented但它相当简洁。

关于c++ - JIT 编译器和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15405550/

相关文章:

windows - 在 .vimrc 文件中设置 gvim 字体

c++ - 没有匹配函数来调用 C++

C++字符串面试题

c++ - 在构造函数初始化列表中向 STL 映射添加元素?

c++ - C++ 是否有办法忽略函数的异常?

java - 如何避免在 Java 中有很多 try catch block

error-handling - 将抛出的异常更改为失败的简洁方法?

c++ - 如何使我的堆栈类动态化

c - 未解析的外部符号(仍在发生)

c# - 确定 Windows 应用商店应用程序是否已从 Windows 服务中暂停或逻辑删除