Как могу ли я объявить переменную, которая не будет оптимизирована (помещена в регистр) для отладки в C ++?

Я разрабатываю простое приложение на C ++ / Qt , и у меня есть следующее объявление:

QGridLayout * layout = new QGridLayout;

Я ' m отладка приложения с помощью gdb . Я установил точку останова, все работает нормально, и отладчик попадает в строку. Но если я попытаюсь проверить объект, объявленный выше, я получу следующий результат:

 -data-Assessment-expression --thread 1 --frame 0 layout
^ готово, значение = "<значение> оптимизировано>"

Я прочитал, что это сообщение «<значение> оптимизировано>» возникает из-за того, что компилятор оптимизировал код и поместил данные в регистр. Я использую компилятор g ++ с установленным флагом -O0 (без оптимизации).

Есть ли что-то, чего мне не хватает, или существует ли способ объявить переменную не оптимизировать, скажем, в отличие от регистра спецификатора хранилища ? Я использую Ubuntu 10.10 Maverick, ядро ​​2.6.35-24.

EDIT1

Еще код:

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

По неизвестным мне причинам после компиляции в подробном режиме -v Установлен флаг , ошибка больше не появлялась даже после его повторного сброса. Теперь gdb создает переменную, и я могу проверить ее значение.

Для тех, кому интересно, установлены следующие флаги компилятора:

g++ -O0 -g3 -Wall -c -fmessage-length=0
5
задан Chris Krycho 1 December 2014 в 15:24
поделиться