glenne%hplsla@HP-SDE.SDE.HP.COM (Glenn Engel) (03/29/89)
I have a program which has multiple stacks and switches between them at run-time. Because of the multiple stacks I would like to generate a backtrace for any of the stacks in the system. My first attempt was to use the frame command to change the active frame but this does not seem to work at all. It seems that frames which are specified as an absolute address are not handled properly. The following is a brief gdb session: GDB 3.1.2, Copyright (C) 1988 Free Software Foundation, Inc. There is ABSOLUTELY NO WARRANTY for GDB; type "info warranty" for details. GDB is free software and you are welcome to distribute copies of it under certain conditions; type "info copying" to see the conditions. Reading symbol data from test...done. Type "help" for a list of commands. (gdb) b debug20 Breakpoint 1 at 0x84c: file src/debug/debug.c, line 83. (gdb) run Starting program: test Bpt 1, debug20 () (src/debug/debug.c line 83) 83 ch = getCh(stdin); (gdb) bt #0 debug20 () (src/debug/debug.c line 83) #1 0x844 in debug10 () (src/debug/debug.c line 77) #2 0x83a in debug () (src/debug/debug.c line 72) (gdb) p/x $fp $1 = 0x000b23aa (gdb) info frame 0 Stack frame at 0xb23aa: pc = 0x84c in debug20 (src/debug/debug.c line 83); saved pc 0x844 called by frame at 0xb23b2 Arglist at 0xb23aa, args: Saved registers: fp at 0xb23aa, sp at 0xb23b2, pc at 0xb23ae (gdb) info frame 0xb23aa Stack frame at 0xb23aa: pc = 0x0 in _start; saved pc 0x844 Arglist at 0xb23aa, args: Saved registers: fp at 0xb23aa, sp at 0xb23b2, pc at 0xb23ae (gdb) Both of the above frame displays say they are at 0xb23aa but they print different info ! This illustrates the problem with a known stack frame. If I specify a frame in a totally separate stack I get similar results. What is the proper technique for getting info/backtraces at an arbitrary stack location ? -- | Glenn R. Engel | Hewlett-Packard | (206) 335-2066 | glenne%hplsla@hplabs.hp.com