7

たとえば、メッセージでは次のようになります。

foo.exeの0x757bd36fでの初回例外:Microsoft C ++例外:メモリ位置0x001278ccの_ASExceptionInfo。

0x757bd36fと0x001278ccはどういう意味ですか?0x757bd36fは、例外がスローされたときのEIPを意味すると思いますが、2番目の数値はどうでしょうか。

4

1 に答える 1

2

ご想像のとおり、最初は例外が発生したときのEIP(64-itコードの場合はRIP)です。

いくつかのテストを行うと、2番目の番号はキャッチされた例外オブジェクトのアドレスです。ただし、これはスローされた例外オブジェクトのアドレスと同じではないことに注意してください。たとえば、次のテストコードを記述しました。

#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が「ファーストチャンス例外」メッセージに表示する2番目のアドレスは、x上記のコードで取得したアドレスと一致します。

于 2012-07-24T15:06:44.677 に答える