4

これは私のクラスの非常に単純化されたバージョンです:

Class MyClass {
public:
    int sizeDesired;
};

MyClassメインでインスタンスのベクトルを作成しています:

int main(int argc, char **argv) {

    std::vector<MyClass> myvec;

    for(int i=0; i<10; ++i)
        myvec.push_back(MyClass());

    for(int i=0; i<myvec.size(); ++i)
        doWork(myvec[i]);

    return 0;
}

プログラムがクラッシュする原因となるメモリ破損 (と思われる) エラーがあります。プログラムがクラッシュすると、 の値MyClass::sizeDesiredがガベージになることがわかりました。そのため、各メンバーにウォッチポイントを設定してMyClass:sizeDesired、これらのメンバーの値がいつ変更されるかを正確に確認できるようにします。

GDBを使用して、どうすればこれを行うことができますか?


MyClassのすべてのインスタンスをstd::vector<MyClass>メインにプッシュした後にブレークすると、次のようになります

(gdb) watch myvec[0].sizeDesired

しかし、GDB はハングするだけです。新しいコマンド プロンプトは表示されません (つまり、(gdb)次の行には表示されません...ただの空白行で、何も起きていないように見えます)。


私は非 GDB ベースのソリューションに対してオープンです。この種の検査/監視が GDB で不可能な場合、使用できる代替ツールはありますか?

4

1 に答える 1