Zajmuję prostą aplikację w C++ /Qt i mam następującą deklarację:Jak mogę zadeklarować zmienną, której nie można zoptymalizować (wpisać do rejestru) w celu debugowania w C++?
QGridLayout *layout = new QGridLayout;
jestem debugowanie aplikacji przy użyciu gdb. Ustawiłem breakpoint, działa dobrze, a debugger trafia w linię. Ale gdy próbuję kontrolować przedmiot zadeklarowane powyżej uzyskać ten wynik:
-data-evaluate-expression --thread 1 --frame 0 layout ^done,value="<value> optimized out>"
Czytałem, że ten komunikat, "<value> optimized out>"
, występuje, ponieważ kompilator zoptymalizowany kod i umieścić dane w rejestrze. Korzystam z kompilatora g ++, z ustawioną flagą -O0
(brak optymalizacji).
Czy jest coś, czego mi brakuje, czy też istnieje sposób deklarowania zmiennej, która nie ma być zoptymalizowana, powiedzmy, w przeciwieństwie do specyfikatora pamięci register
? Jestem na Ubuntu 10.10 Maverick, jądro 2.6.35-24.
Edit1
Niektóre bardziej Kod:
WorkspaceChooserDialog::WorkspaceChooserDialog(QWidget *parent) : QDialog(parent)
{
setWindowTitle(tr("Select a workspace location"));
QLabel *wpLabel = new QLabel(tr("Workspace:"), this);
QLineEdit *wpLineEdit = new QLineEdit(QDir().homePath(), this);
QPushButton *okButton = new QPushButton(tr("OK"), this);
QPushButton *cancelButton = new QPushButton(tr("Cancel"), this);
QGridLayout *layout = new QGridLayout;
connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
qDebug() << "begin: " << layout << " :end";
layout->addWidget(wpLabel, 0, 0);
layout->addWidget(wpLineEdit, 0, 1, 1, 2);
layout->addWidget(okButton, 1, 1);
layout->addWidget(cancelButton, 1, 2);
setLayout(layout);
}
EDIT2
Na nieznanych mi przyczyn, po skompilowany z gadatliwym Tryb -v
flagą, błąd nie pojawiają się już, nawet po ponownym rozbrojeniu. Teraz gdb tworzy zmienną i jestem w stanie sprawdzić jej wartość.
Dla zainteresowanych, flagi kompilatora za zestaw to:
g++ -O0 -g3 -Wall -c -fmessage-length=0
Umieszczenie w rejestrze nie jest jedyną możliwą optymalizacją, która mogła wystąpić tutaj. –
możesz sprawdzić swoje logi kompilatora? prawdopodobnie masz gdzieś nadpisane swoje -O0? – fazo
powinieneś mieć '()' QGridLayout * layout = new QGridLayout-> HERE <-; ?? – fazo