This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Instruction address catching


On Sat, 2002-10-05 at 03:09, Fredrik Tolf wrote:
> On Sat, 2002-10-05 at 02:52, Kevin Buettner wrote:
> > On Oct 5,  2:21am, Fredrik Tolf wrote:
> > 
> > > On Sat, 2002-10-05 at 02:11, Kevin Buettner wrote:
> > > > On Oct 5,  1:36am, Fredrik Tolf wrote:
> > > > 
> > > > > Is it possible, with the current version of gdb, to make it detect every
> > > > > time an address is written to, and to make it stop only if the address
> > > > > of the instruction that wrote to that address isn't equal to a specific
> > > > > value.
> > > > 
> > > > Do it like this:
> > > > 
> > > >     (gdb) watch foo
> > > >     Hardware watchpoint 1: foo
> By the way: I don't seem to be able to set hardware watchpoints... I'm
> running i 2.4.19 linux kernel on an AMD Thunderbird, could that have
> something to do with it?
Sorry... I was wrong. I made a quick test before which was ultimately
wrong. I can set hardware watchpoints.

> > > >     (gdb) condition 1 $pc != 0x80484c8
> > > > 
> > > > The address to compare $pc against should be the address of the
> > > > instruction *after* the one that writes to ``foo''.  It's probably
> > > > easier to figure this out by simply setting a watchpoint on foo,
> > > > running 'til it's hit, and if that's not the one you're interested
> > > > in, add a condition so that it won't stop there again.
> > > > 
> > > > > If it's possible, does it work in a multithreaded application?
> > > > 
> > > > It should.  If it doesn't, it's a bug.
> > >
> > > Are you sure? Wouldn't the pc it compares to be that of the selected
> > > thread and not that of the thread that wrote?
> > 
> > The thread that triggers the watchpoint becomes the selected thread
> > for the purposes of checking the condition.  (At least, I think that's
> > the way it works.)  I've just tried it with a simple (threaded) example
> > and it seems to work as expected...
> OK... if you say so... I'll try it! Thanks a thousandfold!
The strangest thing happened. I made a small test program to test this.
The program spawns two threads, each of which increments a variable of
its own once a second. Even when I set a watchpoint on any of the
variables (i.e. "watch var1"), the program doesn't halt. I checked
manually, and the vars are increased, but gdb won't stop the program.
What can I possibly have done wrong?
> > 
> > Kevin
> > 
> 
> 



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]