2012-05-12 2 views
2

쿠분투 12.04에서 NetBeans 7.1과 Qt 4.8 프로그램 (http://code.google.com/p/image-feature-detector/)을 코딩하고 있습니다. (쿠분투 11.10에서도 마찬가지입니다) 컴파일 된 실행 파일을 실행하려고 할 때 maddening 오류가 발생합니다. 이 프로그램은 완벽하게 컴파일되고 실행되었지만 갑자기 언젠가는 컴파일을 마친 후에 실행하려고 할 때이 오류가 발생합니다. 내가 sudo없이 실행 파일을 실행 내가 할 경우오류/var/tmp/kdecache는 uid 0 대신 uid 1000이 소유합니다.

error /var/tmp/kdecache-myuser is owned by uid 1000 instead of uid 0 

: 나는 kdesudo와 실행 파일을 실행하면

Segmentation fault (core dumped) 

을 그리고 후에, 나는 sudo와 실행 파일을 실행하면

은 내가 가진 무엇 암호를 묻는 메시지가 나타나면 아무 것도 나타나지 않습니다.

_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 0 대신 uid 1000이 소유 한 이유)에 대한 내 답글을 참조하십시오. 코드에서 다음과 같은 문제가있는 것 같지 않습니다. null 포인터 ... 같은 문제가 kdialog에 존재하지 않는 한. – MountainX

답변

0

오우, 실수는 바보 같았습니다. 그것은 KDE가 아닌 내 코드에 있습니다 (예, 우리는 항상 "내 잘못으로는 안된다!") ... su 특권과 관련이 없다고 생각하는 경향이 있습니다. 의심 스러울 때, 그것은 포인터와 관련이있었습니다. 난 그냥 null 포인터의 기능을 사용하려고 시도했다. setChecked()QAbstractdButton 인스턴스의 함수. 예, 완전히 --.- ... 프로그램이 올바르게 컴파일되었지만 실행하여 논리적으로 Segmentation fault을 얻었습니다.

sudo : error /var/tmp/kdecache is owned by uid 1000 instead of uid 0으로 프로그램을 실행하면 흥미로운 점이 있습니다. 현재 sudo으로 프로그램을 실행하면 현재 콘솔에서 같은 오류가 발생하지만 프로그램이 제대로 실행되면 그 오류가 발생합니다.

2

이것은 답변이 아니지만 자신의 코드에 문제가 없다는 것을 보여 주면서 문제를 재현하는 간단한 방법 일 수 있습니다. (질문 제목은 "오류 :"/ var/tmp/kdecache-your_user "는 uid 0 대신 uid 1000이 소유합니다.)

나는 kdialog를 사용할 수 있다고 생각합니다. 우분투의 kdebase-bin 패키지)를 사용하여이 오류를 복제하십시오. 나는 그렇게 할 수 있으며, 해결책을 찾고 싶습니다. (이것은 내가 당신의 질문에 어떻게 왔는지입니다.)

단계 :

  1. 열고 터미널
  2. 는 sudo apt-get을 터미널에서 여전히
  3. 이들이 kdebase-함을 입력 설치합니다

    kdialog --error "blah blah blah."

  4. 예상 결과 : 일반 사용자로이 kdialog를 실행하는 동안 오류가 발생하지 않습니다. 그리고 그것이 제 실제 결과입니다.

  5. 는 sudo -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