これは私のクラスの非常に単純化されたバージョンです:
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 で不可能な場合、使用できる代替ツールはありますか?