您有什么理论可以调试这种潜在有问题的内存访问模式吗?我有预感,这可能与我遇到的某个heisen-bug有关,但我似乎无法查明。

这是在valgrind下使用--track-origins=yes--leak-check=full进行调试构建的片段

我如何滥用Qt的Gui lib,使其以下列方式表现出来?

==15169== Conditional jump or move depends on uninitialised value(s)
==15169==    at 0x99CD8AA: XSetCommand (in /usr/lib64/libX11.so.6.3.0)
==15169==    by 0x99D1FFE: XSetWMProperties (in /usr/lib64/libX11.so.6.3.0)
==15169==    by 0x7280853: QWidgetPrivate::create_sys(unsigned long, bool, bool) (in /usr/lib64/qt4/libQtGui.so.4.8.3)
==15169==    by 0x723550F: QWidget::create(unsigned long, bool, bool) (in /usr/lib64/qt4/libQtGui.so.4.8.3)
==15169==    by 0x723F3E1: QWidget::setVisible(bool) (in /usr/lib64/qt4/libQtGui.so.4.8.3)
==15169==    by 0x40DFE5: QWidget::show() (qwidget.h:494)
==15169==    by 0x40DA5D: SYSApplication::on_start() (sysapplication.cpp:55)
==15169==    by 0x40D5BC: main (main.cpp:8)
==15169==  Uninitialised value was created by a stack allocation
==15169==    at 0x723F0E0: QWidget::setVisible(bool) (in /usr/lib64/qt4/libQtGui.so.4.8.3)
==15169==

最佳答案

在main.cpp:8和sysapplication.cpp:55上检查您引用的变量。如果您有错误,那么这里使用的变量之一就是错误。

同样,检查未初始化的值是由QWidget :: setVisible上的堆栈分配创建的-您是否曾经调用过setVisible?如果是这样,该参数的值是多少?

重要说明:Valgrind将跟踪被复制的内存。如果你有:

int i;       // 1
int j = i;   // 2
int k = j;   // 3
if (k) {}    // 4


那么即使第1行是错误源,Valgrind也会在第4行引发此错误。

Qt也可能无法初始化某些内容。在Valgrind下运行时,许多库会引发很多令人担忧的错误。

10-07 18:58
查看更多