kan*_*eda 5 c++ compiler-construction optimization gdb
我正在用C++/Qt开发一个简单的应用程序,我有以下声明:
QGridLayout *layout = new QGridLayout;
我正在使用gdb调试应用程序.我设置了一个断点,它运行正常,调试器就行了.但是,如果我尝试检查上面声明的对象,我得到这个输出:
Run Code Online (Sandbox Code Playgroud)-data-evaluate-expression --thread 1 --frame 0 layout ^done,value="<value> optimized out>"
我读到这条消息,"<value> optimized out>"
是因为编译器对代码进行了优化,并将数据放入寄存器中.我正在使用g ++编译器,设置了flag -O0
(无优化).
是否存在我缺少的东西,或者它是否存在一种声明变量不被优化的方式,比如存储说明符register
?我在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);
}
Run Code Online (Sandbox Code Playgroud)
EDIT2
由于我不知道的原因,在我使用详细模式-v
标志设置编译后,错误不再出现,即使再次取消设置后也是如此.现在gdb创建变量,我能够检查它的值.
对于谁感兴趣,编译器的标志集是:
g++ -O0 -g3 -Wall -c -fmessage-length=0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4369 次 |
最近记录: |