straceを実行すると、OpenGLの問題はどのように解決されますか?

straceを実行すると、OpenGLの問題はどのように解決されますか?

最近、私のディストリビューション(PLD Linux)を大幅にアップグレードして以来、多数のプログラムを使用するのに問題があります。私が知る限り、OpenGLやPulseAudioに関連するセグフォルトはありません。私は排他的なnvidiaドライバと3.2.xカーネルを使用しています。 Xorg自体はうまく動作し、ほとんどのプログラムを実行できますが、mplayer segfaultなどの問題が発生し、どのプログラムでもサウンドが生成されません。

OpenGLに関連する可能性があることを知ってテストを始めましたglxgears。単独で実行するとすぐにセグフォルトが発生します。その後、以下で実行するとstrace正常に動作することがわかりました。についても同様ですmplayer。テストmp3ファイルから実行するとすぐにsegfaultが発生し、strace mplayer正常に実行されます(パルス化されたオーディオはまだ消え、仮想出力デバイスに戻りますが)。

セグフォルトを回避するために、以下のタスクをどのように実行できますか?straceこの状況をどのようにデバッグできますか?

ベストアンサー1

私はNvidiaがlibGL.so""を開き、現在のプロセスが追跡されているかどうかを検出しようと試みることを観察しました。値がゼロでないか(つまり、現在のプロセスが追跡されているかどうか)によって、異なるコードパスが使用されます。 /proc/self/statusTracerPid:TracerPid

インストールするシステムマイニングそして、問題のプロセス追跡を2回キャプチャします。一度は追跡している間、一度は追跡しないことです。たとえば、

$ sysdig -w glxgears.scap proc.name=glxgears &
$ glxgears &
$ kill -TERM `pidof glxgears`
$ kill -TERM `pidof sysdig`
$ sysdig -w glxgears-strace.scap proc.name=glxgears &
$ strace glxgears &
$ kill -TERM `pidof glxgears`
$ kill -TERM `pidof sysdig`

2つの異なるトレースのテキスト出力を比較して、トレース実行と非追跡実行の間の実行フローの変化を観察しますglxgears

straceOpenGLの問題はlibGLプロセストレース/デバッグの有無によって異なる動作をするため、「修正」してください。

おすすめ記事