2

Kubuntu12.04のNetBeans7.1でQt4.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が表示するプログラムのこの逆アセンブルされた部分の2行目にあるソースコードの行に到達する前に、デバッグが停止します。

_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と、を使用せずにプログラムを実行した場合のように、「Segmetationfault」エラーが発生しましたsudo。さらに、元のフォルダーのアクセス許可を変更すると、アクセス許可付きの新しい/var/tmp/kdecache-looksLikeMd5Number/フォルダーが作成されます。myuser/var/tmp/kdecache-myuser/

私を夢中にさせているこのエラーを解決する方法についての提案をいただければ幸いです。

4

2 に答える 2

2

これは答えではありませんが、自分のコードに問題がないことを示しながら、問題を再現する簡単な方法かもしれません。(あなたの質問のタイトルは私が焦点を当てているところです:「エラー:「/ var / tmp /kdecache-your_user」はuid0ではなくuid1000によって所有されています。)

kdialog(Ubuntuのパッケージkdebase-binの一部)を使用してこのエラーを再現できると思います。私はそうすることができます、そして私は解決策を見つけることを望んでいます(それは私があなたの質問に出くわした方法です)。

手順:

  1. ターミナルを開く
  2. sudo apt-get install kdebase-bin
  3. まだターミナルにいる場合は、次のように入力します。

    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.
于 2012-06-01T15:46:19.273 に答える
0

ああ、間違いはばかげたものだった。それは私のコードにあり、KDEにはありませんでした(そうです、私たちはいつも「これは私のせいではありえない!」と考える傾向があります...)そしてそれはsu特権とは関係がありませんでした。私が疑っていたように、それはポインタに関連していました。nullポインタの関数、まさにインスタンスsetChecked()からの関数を使おうとしていました。QAbstractdButtonはい、完全に-.- ...プログラムは正しくコンパイルされましたが、それを実行することによりSegmentation fault、論理的に、を取得しました。

興味深いのは、プログラムをsudo:で実行した場合に発生したエラーでしたerror /var/tmp/kdecache is owned by uid 1000 instead of uid 0。現在、でプログラムを実行するとコンソールで同じエラーが発生しますsudoが、その後はプログラムが正しく実行されます。

于 2012-06-18T00:28:30.863 に答える