我正在 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/的权限时,会创建一个具有
文件夹。myuser
权限的新 /var/tmp/kdecache-looksLikeMd5Number/
文件夹kdecache-myuser/
如果有任何关于如何解决这个让我发疯的错误的建议,我将不胜感激。
最佳答案
这不是一个答案,但它可能是重现问题的简单方法,同时证明这不是您自己的代码的问题。 (你的问题的标题是我关注的地方:“错误:“/var/tmp/kdecache-your_user”由 uid 1000 而不是 uid 0 拥有”。)
我认为您可以使用 kdialog(Ubuntu 上 kdebase-bin 包的一部分)来复制此错误。我可以这样做,并且我希望找到解决方案(这就是我提出你的问题的方式)。
步骤:
- 打开终端
- sudo apt-get install kdebase-bin
仍在终端中,输入:
kdialog --error“blah blah blah。”
预期结果:以普通用户身份执行此 kdialog 时没有错误。这就是我的实际结果。
- sudo -s(输入您的密码)
重复上面的命令:
kdialog --error“blah blah blah。”
预期结果 - 它应该可以正常工作,不会出现错误。但是,您可能会看到与您的问题中相同的错误。
这是我的实际结果:
$ 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.
关于c++ - 错误/var/tmp/kdecache 由 uid 1000 而不是 uid 0 拥有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10565885/