pol*_*181 40 c++ linux opengl qt nvidia
我的应用程序从网络获取数据并在场景中绘制(场景使用手工制作的OpenGL引擎).
它可以工作几个小时.当我不使用我的桌面时,我的显示器因显示器电源管理器信令(dpms)关闭.然后,当我触摸鼠标或键盘时,显示器打开,应用程序挂起(X也挂起).
如果我这样做
xset -dmps
操作系统不使用dpms并且应用程序工作稳定.
这些问题出现在Centos 6和Archlinux中,但是当我在Ubuntu 12.10下运行应用程序时,它运行得很好!
我尝试了不同的NVidia驱动程序.没有效果.
我尝试使用ssh进行远程登录并使用gdb附加到进程.打开监视器后,我无法在进程表中找到该应用程序.
如何诊断问题?当显示器关闭/打开时会发生什么(在OpengGL环境中)?使用dpms时,Ubuntu是否做了一些特别的事情?
我们猜测问题的原因!当监视器关闭时,我们失去了OpenGL上下文.当监视器唤醒时,应用程序挂起(无上下文).根据操作系统的不同,行为的差异是由于监视器连接不同:Kubuntu的监视器连接VGA电缆.所以(可能)它对X行为没有影响.
您可以首先查看 X 的日志,通常位于 /var/log/ 和 ~/.xsession-errors。OpenGL 确实在做一些奇怪的事情,所以如果你的应用程序有任何日志记录,请将其打开。通过运行启用核心转储ulimit -c unlimited
。您可以通过在 gdb 中打开转储来分析转储,如下所示:
gdb <executable file> <core dump file>
Run Code Online (Sandbox Code Playgroud)
看看是否会产生任何有用的东西,然后研究它是什么。