私の C++/Qt5 プログラムを gdb の下で実行すると、不可能に思えることが経験されました。
while(totalAvailable > (sizeof(quint32)+sizeof(quint16))){
if(nullptr!=c){
// POINT-A
qDebug()<<rct<<"Courier message with ID "<<octomy_message_type_int<<" was received with name "<<c->getName()<<" and "<<bytesAvailable<<" bytes available";
const quint16 bytesSpent=c->dataReceived(*ds, bytesAvailable);
const int left=bytesAvailable-bytesSpent;
totalAvailable-=bytesSpent;
if(left>=0){
if(left>0){
ds->skipRawData(left);
totalAvailable-=left;
}
else{
// POINT-B
qDebug()<<rct<<"LOLBOB";
}
}
else{
qWarning()<<"BAR";
return;
}
}
else{
qWarning()<<"FOO";
return;
}
}
要するに、すべてが期待どおり//POINT-A
にステップインすると、デバッガーはプログラムの最初の行 (ステートメント) にジャンプします。しかし、コードにはorまたはその他の流れを変更するステートメントはありません。これはどのように可能ですか?//POINT-B
//POINT-B
while
break
continue
コードをゼロから再構築して、偽のリンケージまたは同様の問題を排除しようとしましたが、バグはまだ再現可能です。
任意の入力を歓迎します。