gpt4 book ai didi

c++ - 编写 SEH 翻译器

转载 作者:太空宇宙 更新时间:2023-11-04 13:55:39 25 4
gpt4 key购买 nike

class seh_exception : public std::exception {
public:
seh_exception(UINT se_code, PEXCEPTION_POINTERS se_info);
seh_exception(const seh_exception& old);
~seh_exception();

const char *what() const;
};

void translate_seh_exception(UINT se_code, PEXCEPTION_POINTERS se_info) {
throw seh_exception(se_code, se_info);
}

现在,我在构造函数中做什么?我找不到关于 *se_info 将存在多长时间的任何信息,这意味着我可能不应该只将 se_info 保存在私有(private)字段中供以后使用——我应该深深地复制它。或者可能不是?

what() 有什么用?我应该按需召唤底层字符串吗?同样,在这种情况下,在构造函数中分配内存似乎不是一个好主意。

我目前已经实现了它存储 se_codese_info 没有任何深层复制,并在构造函数中生成格式化消息,它有效,虽然我不知道如果它确实应该 起作用。

我打算在“捕获、记录发生的事情、终止”场景中使用它。

最佳答案

你不需要自己的类来实现这个,你可以只抛出 PEXCEPTION_POINTERSse_code 也可在 se_info->ExceptionRecord->ExceptionCode 中获得。

所以最简单的处理程序就是;

void translate_seh_exception(UINT se_code, PEXCEPTION_POINTERS se_info) {
throw se_info;
}

然后你可以catch(PEXCEPTION_POINTERS se_info)

EXCEPTION_POINTERS 保证在 catch block 的持续时间内存在,这就是您需要它的时间。根据文档,每个 catch block 都会调用您的翻译器函数一次,也就是说,它必须为每个包含 try/catch block 的函数重新翻译 SEH 异常。

关于c++ - 编写 SEH 翻译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21600184/

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