2012-05-12 43 views
2

我使用NetBeans 7.1在Kubuntu 12.04编译Qt 4.8程序(http://code.google.com/p/image-feature-detector/)(尽管Kubuntu 11.10发生同样的情况)当我尝试运行编译的可执行文件时出现一个疯狂的错误。该程序编译和运行完美,但突然有一天,我得到了这个错误,当一个正确的编译后,我试图运行它。错误/ var/tmp/kdecache由uid 1000拥有,而不是uid 0

这是我得到的,如果我运行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 <[email protected]> 
_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,我得到了“Segmetation fault”错误。另外,当我更改原始/var/tmp/kdecache-myuser/文件夹的权限时,将创建一个新的/var/tmp/kdecache-looksLikeMd5Number/文件夹,并具有myuser权限。

我很感激任何关于如何解决这个让我疯狂的错误的建议。

+0

嗯,我认为这必须与一些指向null的指针相关。 – AxeEffect

+0

看到我的回复为什么至少部分(“错误:”/ var/tmp/kdecache-computeruser“由uid 1000而不是uid 0拥有”)在您的代码中似乎没有问题,例如空指针...除非在kdialog中存在相同的问题。 – MountainX

回答

0

呃,错误是一个愚蠢的错误。这是在我的代码中,而不是在KDE中(是的,我们总是倾向于认为“这不能由我的错!”),并且它与su权限没有关系。正如我怀疑的那样,它与指针有关。我只是试图使用null指针的功能,完全来自QAbstractdButton实例的功能setChecked()。是的,完全 - - - ...程序编译得当,但通过运行它,我在逻辑上获得了Segmentation fault

有趣的是我得到的错误,如果我运行程序sudoerror /var/tmp/kdecache is owned by uid 1000 instead of uid 0。目前,如果我使用sudo运行程序,但在程序正常运行后,控制台上会出现相同的错误。

2

这不是一个答案,但它可能是一个简单的方法来重现您的问题,同时证明它不是您自己的代码的问题。 (问题的标题是我关注的地方:“错误:”/ var/tmp/kdecache-your_user“由uid 1000拥有,而不是uid 0”。)

我认为你可以使用kdialog Ubuntu上的软件包kdebase-bin)复制这个错误。我可以这样做,我希望找到一个解决方案(这是我如何解决你的问题)。

步骤:

  1. 打开一个终端
  2. 命令和apt-get安装了kdebase斌
  3. 仍然在终端中输入:

    kdialog --error "blah blah blah."

  4. 预期的结果:正常用户执行此kdialog时没有错误。这是我的实际结果。

  5. 须藤-s(输入密码)
  6. 重复上面的命令:

    kdialog --error "blah blah blah."

  7. 预期的结果 - 它应该没有错误工作。但是,你可能会看到的是和你的问题一样的错误。

这里是我的实际结果:

$ kdialog --error "blah blah blah" 
$ sudo -s 
root> kdialog --error "blah blah blah" 
Error: "/var/tmp/kdecache-computeruser" is owned by uid 1000 instead of uid 0. 

你甚至可能看到这样的几个错误。我已经通过各种kdialog测试获得了这些测试,就像上面的测试一样。

Error: "/var/tmp/kdecache-your_user" is owned by uid 1000 instead of uid 0. 
Error: "/tmp/kde-your_user" is owned by uid 1000 instead of uid 0. 
Error: "/tmp/ksocket-your_user" is owned by uid 1000 instead of uid 0. 
kdeinit4: Shutting down running client. 
Connecting to deprecated signal QDBusConnectionInterface::serviceOwnerChanged(QString,QString,QString) 
Error: "/tmp/ksocket-your_user" is owned by uid 1000 instead of uid 0. 
Error: "/tmp/kde-your_user" is owned by uid 1000 instead of uid 0. 
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave. 
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave. 
Error: "/var/tmp/kdecache-your_user" is owned by uid 1000 instead of uid 0. 
kbuildsycoca4 running... 
Error: "/var/tmp/kdecache-your_user" is owned by uid 1000 instead of uid 0. 
Error: "/var/tmp/kdecache-your_user" is owned by uid 1000 instead of uid 0. 
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave. 
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave. 
Error: "/var/tmp/kdecache-your_user" is owned by uid 1000 instead of uid 0. 
Home directory /home/your_user not ours. 
+0

噢!你完全正确!我做了你发布的内容,并且得到了你公开的结果,并且出现了很多像第二段代码那样的错误。你为什么会这样做?你是否有与正在进行的Qt程序相同的错误? – AxeEffect

相关问题