This is the mail archive of the gdb-patches@sourceware.org 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] |
Hi all, When inferiors load a lot of shared libraries gdb spends a lot of time processing shared library breakpoint events. These have a lot of associated bookkeeping that is not easily avoided. This patch modifies gdb to disable the shared library breakpoint when it is not required, specifically: * when stop-on-solib-events is off, * when there are no pending breakpoints, * and when libthread_db is loaded I have a simple test which dlopens 1000 shared libraries. On my machine it runs instantly outside of gdb, but takes roughly a minute when run within gdb. With this patch, it runs instantly in gdb too. The idea for this was not mine, it was Jan Kratochvil's, and he very definitely deserves the credit for it. I wrote the code though, so the bugs are all my fault :) There are two things I'm not sure about with it as it stands. One is to do with program spaces: I noticed that breakpoints have a program space, but breakpoint locations also have a program space. Is the way I have used these correct? The other issue I have is the way it detects whether libthread_db is loaded. This should work fine on platforms that use a libthread_db, but some platforms will have this optimization disabled. Nothing will get worse, but some platforms will not get better when they could. Have I gone about this the wrong way? I would definitely appreciate feedback from those of you who are using gdb on applications with many shared libraries, to know if you are getting any improvement. Cheers, Gary -- http://gbenson.net/
Attachment:
solib-break-disabler-1.patch
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |