Debugging Segmentation fault: 11

Hi, On a project I'm working on, I sometimes get a "Segmentation fault: 11" error, and the program crashes. But I can't figure out when it happens, and cannot reproduce it. It's a big project, with many components communicating via events, and I have no idea who's triggering the problem. My question is how would you go about debugging this? Any ideas what can be triggering it? It sounds very generic... Probably unrelated, but just in case, I also got this (only once so far): chuck(22226,0x7fff790ee310) malloc: *** error for object 0x1028f3408: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug Abort trap: 6 Thanks! Gonzalo

Try binary debugging with comments! Start commenting out chunks of code and
see if you can get it to stop happening. Then start cutting back on
commented out components. Maybe start with all your audio code?
Good luck!
mc
On Tue, Jan 27, 2015 at 12:31 PM, Gonzalo

I assume you're on Linux or OSX. (If it's Windows, I'm clueless.) For me on Ubuntu I type: $ *gdb chuck* and then once it starts up and I get the (gdb) prompt I type: (gdb) *run my_chuck_file.ck* Of course GDB slows down your system, A LOT, but you can keep it running until it hits the segfault. The spew should (hopefully) point toward a specific place in the chuck code that is the problem. (Type q to exit gdb.) You might want to copy the error messages here for the devs to look into. Joel On 01/27/2015 02:53 PM, Gonzalo wrote:

Thanks Joel. One more hiccup: I start my chuck program with: date +"%y%m%d-%T" | chuck wp.ck (I need it to have a timestamp) But I can't do that in gdb. I can disable the timestamp part in the code, but just checking to see if this is possible. On 28/01/2015 8:01 am, Joel Matthys wrote:

Hmm... I've never piped anything into ChucK like that before. How does ChucK access the timestamp? Typically I would do something like that with an argument: chuck wp.ck:`date +"%y%m%d-%T"` and then access it in ChucK with me.arg(0) => string timestamp; Joel On 01/27/2015 03:27 PM, Gonzalo wrote:

This was a suggestion by Perry Cook, it's in chuck-users in a thread called "timestamps", Dec 14. The essence is: ConsoleInput stdin; // gonna read from here stdin.prompt("") => now; // wait until something comes in while (stdin.more()) { stdin.getLine() => ... } // read input (fully working code in his post) I'll try your way to see if I can do this with gdb. Thanks! On 28/01/2015 9:21 am, Joel Matthys wrote:

Oh yeah! I had forgotten about ConsoleInput. (It's undocumented and I think it's generally considered archaic.) I know some early SLorK/PLorK pieces used Tcl/Tk GUIs outputting control numbers piped into ChucK. So I'm sure it's valid code, but I don't know how to debug it with GDB. Joel On 01/27/2015 04:33 PM, Gonzalo wrote:

+1 for gdb. If I were able to see a stack trace with function names (I
think after it crashes in gdb, enter the 'backtrace' command) that would
help a lot as far as pinpointing whatever in your ChucK code is triggering
the crash.
spencer
On Tue, Jan 27, 2015 at 2:39 PM, Joel Matthys
-- Spencer Salazar Doctoral Candidate Center for Computer Research in Music and Acoustics Stanford University spencer@ccrma.stanford.edu +1 831.277.4654 https://ccrma.stanford.edu/~spencer/

On OS X, I found the following to be really handy:
https://developer.apple.com/library/mac/documentation/Performance/Conceptual...
so you can do things like:
$ gdb chuck
(gdb) set env MallocGuardEdges 1
(gdb) run
Setting MallocGuardEdges, MallocScribble and MallocPreScribble might cause
ChucK to get a segfault sooner. Then you print a backtrace by doing:
(gbd) bt
and send the results to Spencer for post mortem!
HTH...
- Rob
On Tue Jan 27 2015 at 6:20:49 PM Spencer Salazar
participants (5)
-
Gonzalo
-
Joel Matthys
-
Mark Cerqueira
-
Robert Poor
-
Spencer Salazar