2012-05-12 60 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

相關問題