【发布时间】:2012-05-20 21:47:01
【问题描述】:
我正在 Kubuntu 12.04 中使用 NetBeans 7.1 编写 Qt 4.8 程序 (http://code.google.com/p/image-feature-detector/)(尽管在 Kubuntu 11.10 中也会发生同样的情况),当我尝试运行已编译的可执行文件时出现令人发狂的错误。该程序编译并运行完美,但突然有一天我在正确编译后尝试运行它时出现此错误。
如果我使用sudo 运行可执行文件,这就是我得到的结果:
error /var/tmp/kdecache-myuser is owned by uid 1000 instead of uid 0
如果我在没有sudo 的情况下运行可执行文件,我会得到:
Segmentation fault (core dumped)
如果我使用kdesudo 运行可执行文件,在出现提示密码的窗口后,什么也没有发生。
如果我调试程序,调试会在到达 NetBeans 显示给我的程序反汇编部分的第二行的任何源代码行之前停止:
_ZN15QAbstractButton10setCheckedEb()
Stops here->_ZN15QAbstractButton10setCheckedEb+22: mov 0x8(%rdi),%rbp
_ZN15QAbstractButton10setCheckedEb+26: mov %esi,%r12d
_ZN15QAbstractButton10setCheckedEb+29: movzbl 0x214(%rbp),%eax
_ZN15QAbstractButton10setCheckedEb+36: test $0x1,%al
_ZN15QAbstractButton10setCheckedEb+38: je 0x7ffff74a10d0 <_ZN15QAbstractButton10setCheckedEb+192>
_ZN15QAbstractButton10setCheckedEb+44: mov %eax,%edx
_ZN15QAbstractButton10setCheckedEb+46: shr %dl
_ZN15QAbstractButton10setCheckedEb+48: and $0x1,%edx
_ZN15QAbstractButton10setCheckedEb+51: cmp %sil,%dl
_ZN15QAbstractButton10setCheckedEb+54: je 0x7ffff74a10d0 <_ZN15QAbstractButton10setCheckedEb+192>
_ZN15QAbstractButton10setCheckedEb+60: test %sil,%sil
_ZN15QAbstractButton10setCheckedEb+63: je 0x7ffff74a1100 <_ZN15QAbstractButton10setCheckedEb+240>
_ZN15QAbstractButton10setCheckedEb+69: mov %rsp,%rdi
_ZN15QAbstractButton10setCheckedEb+72: mov %rbx,(%rsp)
_ZN15QAbstractButton10setCheckedEb+76: callq 0x7ffff70bd220 <_ZN11QMetaObject8addGuardEPP7QObject@plt>
_ZN15QAbstractButton10setCheckedEb+81: movzbl 0x214(%rbp),%eax
_ZN15QAbstractButton10setCheckedEb+88: mov %r12d,%edx
_ZN15QAbstractButton10setCheckedEb+91: and $0x1,%edx
_ZN15QAbstractButton10setCheckedEb+94: add %edx,%edx
_ZN15QAbstractButton10setCheckedEb+96: and $0xfffffffd,%eax
_ZN15QAbstractButton10setCheckedEb+99: or %edx,%eax
_ZN15QAbstractButton10setCheckedEb+101: test $0x20,%al
_ZN15QAbstractButton10setCheckedEb+103: mov %al,0x214(%rbp)
_ZN15QAbstractButton10setCheckedEb+109: je 0x7ffff74a10e8 <_ZN15QAbstractButton10setCheckedEb+216>
_ZN15QAbstractButton10setCheckedEb+111: mov %rbp,%rdi
_ZN15QAbstractButton10setCheckedEb+114: callq 0x7ffff749f9f0
_ZN15QAbstractButton10setCheckedEb+119: cmpq $0x0,(%rsp)
我进行了实验并将/var/tmp/kdecache-myuser/ 的所有权更改为root(uid 0)。然后我用sudo 运行我的可执行文件,我得到一个“分段错误”错误,就像我在没有sudo 的情况下运行程序一样。另外,当我更改原始/var/tmp/kdecache-myuser/ 文件夹的权限时,使用myuser 权限创建了一个新的/var/tmp/kdecache-looksLikeMd5Number/ 文件夹。
如果有任何关于如何解决这个让我发疯的错误的建议,我将不胜感激。
【问题讨论】:
-
嗯,我想这一定与一些指向null的指针有关。
-
请参阅我的回复,了解为什么至少部分原因(“错误:“/var/tmp/kdecache-computeruser”归 uid 1000 而不是 uid 0“所有”)似乎不是代码中的问题,例如空指针...除非 kdialog 中存在相同的问题。
标签: c++ qt netbeans segmentation-fault kde