自从最近对我的发行版(PLD Linux)进行重大升级以来,我在使用大量程序时遇到了麻烦。据我所知,任何涉及 OpenGL 或 PulseAudio 的段错误。我正在使用专有的 nvidia 驱动程序和 3.2.x 内核。 Xorg 本身运行良好,我能够运行大多数程序,但是诸如 mplayer 段错误之类的问题并且任何程序都不会产生声音。
当我发现它可能与 OpenGL 有关时,我开始进行glxgears
测试。单独运行它会立即出现段错误。然后我发现在下面运行它strace
运行得很好。对于 也是同样的情况mplayer
。在测试 mp3 文件上运行它会立即出现段错误,运行strace mplayer
效果很好(尽管脉冲音频仍然消失并且恢复为虚拟输出设备)。
如何在下面运行某些东西strace
以防止出现段错误以及我将如何继续调试这种情况?
答案1
我观察到 Nvidia尝试通过打开并查找“ ”libGL.so
来检测当前进程是否正在被跟踪。根据 的值是否非零(即当前处理是否正在被跟踪)而采取不同的代码路径。 /proc/self/status
TracerPid:
TracerPid
安装系统挖掘,并两次捕获有问题的进程的跟踪,一次在跟踪时捕获,一次在没有跟踪时捕获。例如:
$ 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`
比较两个不同跟踪的文本输出,以观察 的跟踪运行和非跟踪运行之间执行流的变化glxgears
。
strace
“修复”您的 OpenGL 问题,因为libGL
根据进程是否被跟踪/调试而表现不同。
答案2
我想象另一个包用它自己的版本替换了 libGL.so,替换了 nVidia 版本 - 很可能是 Mesa 包。要解决此问题,请重新安装专有的 nVidia 驱动程序,这将恢复 nVidia 提供的 libGL.so。
答案3
你说你尝试过 nv、nouveau 和 vesa。每个案件发生了什么?
另外,尝试使用另一个发行版从 USB 记忆棒启动您的计算机,看看问题是否仍然存在。如果没有,那么也许其他发行版的驱动程序版本可以在您的计算机上使用。它还可以揭示您所遇到的问题的具体情况(这似乎是一个计时错误)。
现代机器是否仍然能够减慢 PCI 总线速度?它是台式电脑还是笔记本电脑?
顺便说一句,如果可能的话,在性能方面,完全避免使用 ATI 和 NVidia,可以为自己省去很多未来的痛苦。他们的利润如此之低,即使用户群下降 1%,也可能会促使他们改正行为。
答案4
摆脱专有的 nvidia 驱动程序并使用开源驱动程序。您确定自己的专有 nvidia 驱动程序有问题。