我正在处理一个函数和一个子函数,该子函数在函数内被调用。两者都有一个__try .. __except
子句,我想看看在函数情况下的一般异常处理,在子函数情况下的特殊处理,换句话说:
int function(){
__try{
do_something();
return subfunction();
} __except {
show("general exception");
}
int subfunction(){
__try{
return do_something_else();
} __except {
show("specific case");
}
在这种情况下:
当do_something()
出错时,我会看到“一般异常”。
当do_something_else()
出错时,我还会看到“一般异常”,这不是我想要的。
我想要的是:
当do_something()
出错时,我想看到“一般异常。
当do_something_else()
出错时,我想查看“特定情况”。
有人知道怎么做吗?
预先感谢
答案 0 :(得分:1)
#include <iostream>
#include <Windows.h>
int do_something_else()
{
*(reinterpret_cast<int*>(0)) = 1;
return 0;
}
int do_something()
{
return 0;
}
int subfunction();
int32_t ReportCrash(LPEXCEPTION_POINTERS ExceptionInfo) //exception and context pointers are hrere
{
return EXCEPTION_EXECUTE_HANDLER;
}
int function()
{
__try
{
do_something();
return subfunction();
}
__except (ReportCrash(GetExceptionInformation()))
{
std::cout << ("general exception");
}
return 0;
}
int subfunction()
{
__try
{
return do_something_else();
}
__except (ReportCrash(GetExceptionInformation()))
{
std::cout << ("specific case");
}
return 0;
}
int main()
{
std::cout << "Hello World!\n";
function();
}
详细信息为here
答案 1 :(得分:1)
您可以使用RaiseException。
有关更多详细信息,请参见Using Structured Exception Handling (SEH)。
#define SUBCODE 0x1000
int Filter(LPEXCEPTION_POINTERS exceptionPointers,DWORD& code) {
code = exceptionPointers->ExceptionRecord->ExceptionCode;
return EXCEPTION_EXECUTE_HANDLER;
}
int function(){
DWORD code;
__try{
do_something();
return subfunction();
} __except ( Filter( GetExceptionInformation(), code ) ){
if (code == SUBCODE) {
show("specific case");
} else {
show("generic code");
}
}
}
int subfunction(){
__try{
return do_something_else();
} __except (EXCEPTION_EXECUTE_HANDLER){
RaiseException( SUBCODE , 0, 0 , NULL );
}
}
答案 2 :(得分:0)
您编写的代码无法编译。代替:
__except { ... }
您需要:
__except (EXCEPTION_EXECUTE_HANDLER) { ... }
然后按预期运行。