Estoy desarrollando una aplicación simple en C++/Qt, y tengo la siguiente declaración:¿Cómo puedo declarar una variable que no se debe optimizar (poner en registro) para depurar en C++?
QGridLayout *layout = new QGridLayout;
estoy depuración de la aplicación usando GDB. Establecí un punto de interrupción, funciona bien, y el depurador llega a la línea. Pero si trato de inspeccionar el objeto declarado anteriormente consigo esta salida:
-data-evaluate-expression --thread 1 --frame 0 layout ^done,value="<value> optimized out>"
leí que este mensaje, "<value> optimized out>"
, se debe a que el compilador optimiza el código, y poner los datos en el registro. Estoy usando el compilador g ++, con el indicador -O0
(ninguna optimización) establecido.
¿Hay algo que me falta, o existe una forma de declarar una variable no optimizada, por ejemplo, en oposición al especificador de almacenamiento register
? Estoy en Ubuntu 10.10 Maverick, kernel 2.6.35-24.
EDIT1
algo más de código:
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
Por razones desconocidas para mí, después de haber compilado con verbosa modo -v
pabellón conjunto, el error no lo hizo aparecen más, incluso después de desarmarlo nuevamente. Ahora gdb crea la variable, y puedo inspeccionar su valor.
Para quienes están interesados, banderas del compilador establecen son:
g++ -O0 -g3 -Wall -c -fmessage-length=0
Ser puesto en un registro no es la única optimización posible que puede haber ocurrido aquí. –
¿podría verificar los registros de su compilador? probablemente tiene un lugar sobreescrito su -O0? – fazo
si tiene '()' QGridLayout * layout = new QGridLayout-> HERE <-; ?? – fazo