Here are some things regarding detecting and preventing<br>segfaults I've once written down for my own reference :<br><br><a href="http://python-camelot.s3.amazonaws.com/gpl/release/pyqt/doc/advanced/debug.html">http://python-camelot.s3.amazonaws.com/gpl/release/pyqt/doc/advanced/debug.html</a><br>
<a href="http://python-camelot.s3.amazonaws.com/gpl/release/pyqt/doc/advanced/development.html">http://python-camelot.s3.amazonaws.com/gpl/release/pyqt/doc/advanced/development.html</a><br><br>I have not seen an undocumented segfault caused by sip or<br>
pyqt in the last year.<br><br><div class="gmail_quote">On Sat, Jan 5, 2013 at 4:50 PM, Andreas Pakulat <span dir="ltr"><<a href="mailto:apaku@gmx.de" target="_blank">apaku@gmx.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
On Sat, Jan 5, 2013 at 4:09 PM, Lee Harr <<a href="mailto:missive@hotmail.com">missive@hotmail.com</a>> wrote:<br>
>> I tried pynguin-0.12.zip on Windows7, python 2.7, PyQt 4.8.4 32bit,<br>
>> and I could run "go()" many times without any crashes or warnings.<br>
>> However, there appears to be no "tournament" function.<br>
><br>
> Thanks for taking your time on this, but the problem is only<br>
> in the development sources. I am doing my best to not make<br>
> a release that is known to segfault.<br>
><br>
> (Dev version uses python-3.2 and pyqt-4.9)<br>
><br>
>> One advise, if I may say so: The chance of finding someone who would<br>
>> be willing to debug your entire project is slim. On a mailing list<br>
>> such as this one, the best way is to reduce the problem to a self<br>
>> contained, minimum size test case which reproduces the bug.<br>
><br>
> Yes, you are right, but I have been working on this for about a<br>
> month now and the only way I've been able to get it to crash<br>
> is in corner cases with the whole application running.<br>
><br>
><br>
> That's why I am asking for general advice on how to find and<br>
> squash a bug like this.<br>
><br>
> Has anyone ever found and fixed a segfault using QGraphicsScene<br>
> and QGraphicsItem before? What was the problem?<br>
><br>
> What kinds of things generally cause a segfault like this?<br>
<br>
Often a segfault is caused by using a pointer (in C++) which points to<br>
a memory location thats not valid anymore, for example because the<br>
object has been deleted already. In the context of PyQt this can<br>
happen when you stop keeping references to objects that or instances<br>
of C++-provided classes in python. In such a case the C++ parts of the<br>
object will be deleted and thus any other C++ code that has a<br>
reference to the object will crash when it tries to access the object.<br>
I think thats the most common problem one encounters with PyQt4.<br>
<br>
To know why the crash happens you should generate a backtrace, this is<br>
usually rather easy on Linux and other unix-systems by enabling<br>
core-dumps via something like ulimit -c 200000. Then run your program<br>
so it crashes, this should print out something like "core file<br>
generated". The file will be named 'core' and will be put in the<br>
current working directory of the application at the point of the<br>
crash. You can examine it using gdb like:<br>
gdb python core<br>
thread apply all bt full<br>
That generates a backtrace which you could post here, it'll probably<br>
hint either towards the C++ code that still has a reference to an<br>
already deleted object or into some sip code that thinks it can access<br>
an object thats actually deleted already.<br>
<br>
On Windows generating a backtrace is usually easiest done using the<br>
post-mortem debugger from Visual Studio, it'll show up once the app<br>
crashes and allows you to stop at the line.<br>
<br>
In both cases you should make sure that Qt and PyQt (and possibly sip)<br>
have been built with debug symbols, otherwise you won't get references<br>
to the functions being involved.<br>
<br>
Andreas<br>
_______________________________________________<br>
PyQt mailing list    <a href="mailto:PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><br>
<a href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt" target="_blank">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a><br>
</blockquote></div><br>