Can't debug x86_64 C++ programs.
John Fine
johnsfine@verizon.net
Thu Sep 18 23:25:00 GMT 2008
Keith Seitz wrote:
>
> That sounds like a plausible explanation. You might try to see if
> numregs is changing or if the register number is greater than the
> amount that has been allocated.
>
> It shouldn't, but who knows. There has been a fair amount of churn in
> this area in gdb over the last year.
>
This is a situation in which I really could use a decent 64-bit debugger
(to find the bug in gdb/Insight). But I don't know how to use gdb
beyond the simplest operations. I wouldn't even know how to try to used
gdb to debug itself.
So I wasted lots of time trying to use
fprintf_unfiltered (gdb_stdlog,
Then I realized most of those were just trying to pop up in a window
when Insight crashed, so I would never get to see them.
So I tried ordinary printf and verified what I expected. But I still
don't know enough about gdb/Insight internals to know exactly where the
bug is. I'm not even sure yet whether it is gdb or insight (though I'm
looking at code that is apparently gdb.
I put printf's in
architecture_changed_event
deprecated_current_gdbarch_select_hack
setup_architecture_data
and
gdb_regformat
The output I get from my printf's is
deprecated_current_gdbarch_select_hack() current_gdbarch=0xa89450
architecture_changed_event
setup_architecture_data() current_gdbarch=0xa89450 numregs=50
old_regs=0xc98ab0 regformat=0xc98de0 regtype=0xc98eb0
deprecated_current_gdbarch_select_hack() current_gdbarch=0xc9de00
architecture_changed_event
gdb_regformat() current_gdbarch=c9de00 numregs=58 regno=0 fm=0x78
gdb_regformat() current_gdbarch=c9de00 numregs=58 regno=1 fm=0x78
...
gdb_regformat() current_gdbarch=c9de00 numregs=58 regno=55 fm=0x78
gdb_regformat() current_gdbarch=c9de00 numregs=58 regno=56 fm=0x78
Notice something calls deprecated_current_gdbarch_select_hack, which
calls architecture_changed_event, then something calls
setup_architecture_data.
I think architecture_changed_event OUGHT to call
setup_architecture_data, but I can't tell from the source code what it
actually does or who calls setup_architecture_data.
Then notice the second time that deprecated_current_gdbarch_select_hack
is called it still calls architecture_changed_event, but nothing calls
setup_architecture_data, so the data structures are still allocated for
50 registers, but now there are 58.
The registers 0 through 56 get their formats set, trashing regtype,
which as I expected does follow regformat in memory.
The question of what is supposed to call setup_architecture_data
on/after that second call to deprecated_current_gdbarch_select_hack is
way beyond both my understanding of the GCC source code and my ability
to debug things by adding printf's.
More information about the Insight
mailing list