Should gdb_backtraces() still work in 8.0?
(gdb) call gdb_backtraces()
Program received signal SIGSEGV, Segmentation fault. 0x0005e0c4 in gdb_backtrace (thread_id=<optimized out>) at /home/pi/Pike-v8.0.10/src/interpret.c:3345 3345 args = DO_NOT_WARN((INT32) MINIMUM(f->num_args, Pike_sp - f->locals)); The program being debugged was signaled while in a function called from GDB. GDB remains in the frame where the signal was received. To change this behavior use "set unwindonsignal on". Evaluation of the expression containing the function (gdb_backtraces) will be abandoned. When the function is done executing, GDB will silently stop.
(gdb) p *f $2 = {refs = 1, args = 1, fun = 9, num_locals = 1, num_args = 1, flags = 0, ident = 0, next = 0x1f7bd84, scope = 0x0, pc = 0x0, return_addr = 0x200336f "\024\217-", locals = 0xb6ac5098, save_sp = 0xb6ac5090, expendible = 0xb6ac5098, save_mark_sp = 0xb6a63000, mark_sp_base = 0xb6a63000, current_object = 0x1f78608, current_program = 0x1f726ec, context = 0x1f858dc, current_storage = 0x1f8ef50 "`\357\370\001\003"} (gdb) p *Pike_interpreter_pointer Cannot access memory at address 0x0
(gdb) info threads Id Target Id Frame * 2 Thread 0xb65c4470 (LWP 19748) "pike" 0xb6e9e250 in nanosleep () from /lib/arm-linux-gnueabihf/libpthread.so.0 1 Thread 0xb6fde000 (LWP 19742) "pike" 0x0005e0c4 in gdb_backtrace (thread_id=<optimized out>) at /home/pi/Pike-v8.0.10/src/interpret.c:3345
Both threads look like normal pike interpreter threads, except the one with the crashed gdb_backtraces() on top.
This is repeatable, but not from just running Hilfe. ARM (Pi).
I ran into similar problems when debugging a deadlock. I fixed gdb_backtraces() to not segfault, maybe you can give it another try now? In my case all threads are swapped out, which quite looks like what you have there.
Could we move gdb_backtraces out of the PIKE_DEBUG ifdef? Its quite useful to have even in "production" environments, where the slowdown of PIKE_DEBUG might be a bit too much. It adds a mere 2.5k of code size.
arne
On 11/21/14 09:25, Mirar @ Pike developers forum wrote:
Should gdb_backtraces() still work in 8.0?
(gdb) call gdb_backtraces()
Program received signal SIGSEGV, Segmentation fault. 0x0005e0c4 in gdb_backtrace (thread_id=<optimized out>) at /home/pi/Pike-v8.0.10/src/interpret.c:3345 3345 args = DO_NOT_WARN((INT32) MINIMUM(f->num_args, Pike_sp - f->locals)); The program being debugged was signaled while in a function called from GDB. GDB remains in the frame where the signal was received. To change this behavior use "set unwindonsignal on". Evaluation of the expression containing the function (gdb_backtraces) will be abandoned. When the function is done executing, GDB will silently stop.
(gdb) p *f $2 = {refs = 1, args = 1, fun = 9, num_locals = 1, num_args = 1, flags = 0, ident = 0, next = 0x1f7bd84, scope = 0x0, pc = 0x0, return_addr = 0x200336f "\024\217-", locals = 0xb6ac5098, save_sp = 0xb6ac5090, expendible = 0xb6ac5098, save_mark_sp = 0xb6a63000, mark_sp_base = 0xb6a63000, current_object = 0x1f78608, current_program = 0x1f726ec, context = 0x1f858dc, current_storage = 0x1f8ef50 "`\357\370\001\003"} (gdb) p *Pike_interpreter_pointer Cannot access memory at address 0x0
(gdb) info threads Id Target Id Frame
- 2 Thread 0xb65c4470 (LWP 19748) "pike" 0xb6e9e250 in nanosleep () from /lib/arm-linux-gnueabihf/libpthread.so.0 1 Thread 0xb6fde000 (LWP 19742) "pike" 0x0005e0c4 in gdb_backtrace (thread_id=<optimized out>) at /home/pi/Pike-v8.0.10/src/interpret.c:3345
Both threads look like normal pike interpreter threads, except the one with the crashed gdb_backtraces() on top.
This is repeatable, but not from just running Hilfe. ARM (Pi).
What's the git command to get whatever git is calling the head revision of Pike? (I presume it's there.)
pike-devel@lists.lysator.liu.se