public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Martin.Runge@rohde-schwarz.com
To: markus.grunwald@gmx.de
Cc: gdb@sourceware.org
Subject: Antwort: Big speed differences when setting breakpoints
Date: Tue, 10 Aug 2010 08:25:00 -0000	[thread overview]
Message-ID: <OF20E29A82.06FDDD18-ONC125777B.002E47F5-C125777B.002E44D4@rohde-schwarz.com> (raw)
In-Reply-To: <e94cd1ab56c877bb47ca240fed407176.squirrel@grunwald.homedns.org>

Hi Markus,

I was fighting with this issue, too. Especially, if the sources are 
located on a slow network share ( e.g. smb) it is extremely slow.
When setting a breakpoint by sourcefile:lineNr, gdb searches the sybmol 
tables of all object files linked into the binary for the given Source 
file. If found, the symbol table holds the address for that breakpoint. 

For some reason unknown to me, gdb tries for every source and header file 
mentioned in the symbol table, if the source file is still there, or if it 

can be found via source path substitution, or if its a symlink by 
following it. So gdb opens and stats every file mentioned in the symbol 
table ( even stdio.h, .... ). (this is needed whenever the path to the 
sources differes between compiling and debugging)

When giving just the filename, gdb takes the first matching filename from 
the symbol table, no need to open / stat files on disk.

Please also see Thread titled "[PATCH] Avoid most open and stat syscalls 
when setting a breakpoint" in gdb patches mailinglist:
http://www.cygwin.com/ml/gdb-patches/2010-04/msg00466.html


Regards 
Martin 




"Markus Grunwald" <markus.grunwald@gmx.de> 
Gesendet von: gdb-owner@sourceware.org
09.08.2010 08:29

An
gdb@sourceware.org
Kopie

Thema
Big speed differences when setting breakpoints






Hello,

Can somebody explain these differences?

> (gdb) maint time 1
> (gdb) break
/home/gru/projects/vxp/branches/branch-0-2-30-X/Dafit_Code/dafit2/dafit2/CPTApplication.cpp:370
> Breakpoint 1 at 0x8161436: file
/home/gru/projects/vxp/branches/branch-0-2-30-X/Dafit_Code/dafit2/dafit2/CPTApplication.cpp,
line 370.
> Command execution time: 5.840365

compare it to this:

> (gdb) break CPTApplication.cpp:370
> Breakpoint 1 at 0x8161436: file
/home/gru/projects/vxp/branches/branch-0-2-30-X/Dafit_Code/dafit2/dafit2/CPTApplication.cpp,
line 370.
> Command execution time: 0.708044

Setting a breakpoint with the complete path is awfully slow, while it is
ok when you give only the filename.  /home is on an nfs mount where disk
access is expensive, but even without nfs, the difference is quite big. I
wrote a little benchmark and straced the "open" calls:

% strace -eopen -o /tmp/gdb2.strace gdb dafit_x86.bin -x
~/gdb-benchmark-only-names.gdb
% strace -eopen -o /tmp/gdb.strace gdb dafit_x86.bin -x 
~/gdb-benchmark.gdb

 % wc -l /tmp/gdb.strace /tmp/gdb2.strace
  88350 /tmp/gdb.strace
  20 /tmp/gdb2.strace

What? 80000 calls to "open" if I pass the whole path and only 20 
otherwise?

BTW: This is debian stables gdb:
% dpkg -l gdb
||/ Name                                Version 
 Description
+++-===================================-===================================-======================================================================================
ii  gdb                                 6.8-3 
 The GNU Debugger

I would be happy if somebody could explain this behaviour....

Thanks,
Markus Grunwald



-- 
Markus Grunwald                        http://the-grue.de

Registered Linux User Nr 101577
http://counter.li.org




      parent reply	other threads:[~2010-08-10  8:25 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-09  6:30 Markus Grunwald
2010-08-09 16:37 ` Tom Tromey
2010-08-10  8:25 ` Martin.Runge [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=OF20E29A82.06FDDD18-ONC125777B.002E47F5-C125777B.002E44D4@rohde-schwarz.com \
    --to=martin.runge@rohde-schwarz.com \
    --cc=gdb@sourceware.org \
    --cc=markus.grunwald@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).