使用“尝试”来避免分段错误

rsm*_*rsm 4 python segmentation-fault pygobject gtk3

最近在我的一个程序中,我遇到了分段错误问题。我设法找到引起问题的线,但没有找到解决它的方法。

该行:

self.window_player.add(self.vlc)
Run Code Online (Sandbox Code Playgroud)

在哪里self.vlc是一个小部件,self.window_playerGtk.Window()在林间空地中创建的空。

该行位于__init__我的程序的,因此实际上此问题仅在启动该程序时发生。奇怪的事实是,错误仅显示为(启动程序的)10次​​中的1次

错误:这 Segmentation fault是我从终端获得的唯一输出

所以我尝试了:

while True:
    try:
        self.window_player.add(self.vlc)
        break
    except:
        print "segmentation"
Run Code Online (Sandbox Code Playgroud)

问题是分割错误似乎并没有被try!排除。

Hav*_*vok 5

抱歉,您无法处理。段错误是由内存损坏,超出拥有的内存范围的读取或写入,两次释放以及其他一些原因引起的。

您可以在此处找到一些导致段错误的问题的示例:

https://gist.github.com/carlos-jenkins/8873932

操作系统将终止有问题的程序,您对此无能为力。您唯一的解决方案是纠正根本问题。

您可以使用工具Valgrind运行程序,它将使您准确找到问题所在:

http://valgrind.org/

在Ubuntu,只是sudo apt-get install valgrind然后valgrind <program cmd>将启动该程序。这个过程会慢很多,但是大多数时候都会发现问题所在。

旁注:从技术上讲,您可以通过注册该信号的回调来捕获SIGSEV信号。但是你不应该。有关更多信息,请参见以下答案:

/sf/answers/714214371/