Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

How can I catch segmentation fault in python?

5,531 views
Skip to first unread message

justin

unread,
Nov 17, 2010, 12:26:19 AM11/17/10
to
Hi all,

I am calling a program written in C inside Python using ctypes,
and it seems that sometimes the program in C crashes while it's being
used in Python.
Even under the circumstances, I want to get the Python program going
by handling the segmentation fault.

I've already searched the Internet, but couldn't get the right answer
to catch them.
Could any of you please let me know how to deal with this and catch
the segmentation fault in Python?

Thanks,
Justin.

swapnil

unread,
Nov 17, 2010, 1:15:14 AM11/17/10
to

Segmentation fault isn't exactly an exception that you can catch. It
usually means something has gone horribly wrong, like dereferencing
invalid pointer, trying to access memory out of process's range. Since
if you run out of memory Python simply raises MemoryError exception,
which you can catch. So that is not the case for segmentation fault.

Chris Rebert

unread,
Nov 17, 2010, 2:01:05 AM11/17/10
to justin, pytho...@python.org

You can't "catch" it. It's not a mere Exception, it's a fatal error
that effectively crashes the interpreter itself.
At best, you could perhaps use the `multiprocessing` or `subprocess`
modules to segregate the part of your program that uses ctypes and
then try and recover when you detect that the subprocess has crashed.
Instead, if possible, fix the C program and/or ensure that there's not
an error in your ctypes interfacing code.

Cheers,
Chris
--
http://blog.rebertia.com

John Nagle

unread,
Nov 17, 2010, 2:06:01 AM11/17/10
to

Either fix the program so it doesn't crash,or run the offending
module and the C code in a subprocess.

John Nagle

justin

unread,
Nov 17, 2010, 9:28:36 AM11/17/10
to

Thanks guys for this fast replies,

Turns out that it is a fact that segmentation fault is not what I can
deal with in programming level.
But the problem is that the code is not mine, and it takes over a day
for me to get the point where the segmentation fault occurred.
Plus, it seems that the point is not deterministic

Still, I think I should at least try to figure out exactly at which
point the segmentation fault occurs, and think where to go from there
according to your kind advice.

Again many thanks,
Justin.

Wolfgang Rohdewald

unread,
Nov 17, 2010, 10:37:45 AM11/17/10
to pytho...@python.org, justin
On Mittwoch 17 November 2010, justin wrote:
> But the problem is that the code is not mine, and it takes
> over a day for me to get the point where the segmentation
> fault occurred. Plus, it seems that the point is not
> deterministic
>
> Still, I think I should at least try to figure out exactly at
> which point the segmentation fault occurs, and think where to
> go from there according to your kind advice.

try valgrind

--
mit freundlichen Grüssen

with my best greetings

Wolfgang Rohdewald

dipl. Informatik Ing. ETH Rohdewald Systemberatung
Karauschenstieg 4
D 21640 Horneburg
Tel.: 04163 826 819
Fax: 04163 826 828
Internet: http://www.rohdewald.de

Wolfgang Rohdewald

unread,
Nov 17, 2010, 10:47:16 AM11/17/10
to pytho...@python.org, justin
On Mittwoch 17 November 2010, Wolfgang Rohdewald wrote:
> On Mittwoch 17 November 2010, justin wrote:
> > But the problem is that the code is not mine, and it takes
> > over a day for me to get the point where the segmentation
> > fault occurred. Plus, it seems that the point is not
> > deterministic
> >
> > Still, I think I should at least try to figure out exactly
> > at which point the segmentation fault occurs, and think
> > where to go from there according to your kind advice.
>
> try valgrind

hit the send button too fast...

even if the segmentation fault only happens after a long time
valgrind might find problems much sooner, and fixing them
might remove the segmentation fault.

--
Wolfgang

justin

unread,
Nov 17, 2010, 11:00:28 AM11/17/10
to
Just checked what is valgrind, sounds promising.
Let me try that.

Thanks a lot,
Justin.

0 new messages