“第一次机会异常......”消息中的十六进制数字是什么意思?

时间:2012-07-24 15:03:55

标签: c++ exception-handling first-chance-exception

例如,在消息中:

  

foo.exe中0x757bd36f的第一次机会异常:Microsoft C ++   异常:_ASExceptionInfo在内存位置0x001278cc ..

0x757bd36f和0x001278cc是什么意思?我认为0x757bd36f意味着抛出异常时的EIP,但第二个数字呢?

1 个答案:

答案 0 :(得分:2)

正如您所推测的那样,第一个是异常发生时的EIP(或者是64位代码的RIP)。

进行一些测试,第二个数字是被捕获的异常对象的地址。但请记住,与抛出的异常对象的地址相同。例如,我编写了以下测试代码:

#include <iostream>
#include <conio.h>

class XXX { } xxx;

void thrower() { 
    throw xxx;
}

int main() {
    try {
        std::cout << "Address of xxx: " << (void *)&xxx << "\n";
        thrower();
    }
    catch(XXX const &x) {
        std::cout << "Address of x: " << (void *)&x << "\n";
    }
    getch();
    return 0;
}

至少在我的测试中,第二个地址VS在其“第一次机会异常”消息中显示与上面代码中x的地址匹配。

相关问题