2016-12-07 4 views
2

Auf meiner Fedora-Box habe ich eine Menge von separaten Debug-Informationen installiert.Auswahl Subset von Debug-Info-Dateien in gdb Sitzung

sudo DNF debuginfo-install <list of packets>

, wenn ich einige einfache Code debuggen es sehr lange braucht, bis ein Symbol angezeigt wird oder einige Werte gedruckt werden. Es ist ziemlich klar, dass es absolut notwendig ist, alle installierten Symboldateien auszuwerten, um alle Informationen zu erhalten.

Aber wenn ich ein Problem habe, sagen auf einem lib wie goocanvas Ich möchte nur meinen lokaler Debug smbols erzeugt mit meinem eigenen kompilierten Code mit -g Option und die nur die Debug-Informationen zu goocanvas Libs haben.

Wie kann diese Art von Auswahl erreicht werden? Nur indem Sie den Ordner der Debug-Info-Dateien umbenennen und eine Kopie der benötigten Dateien erzeugen? Vielleicht als Symlink? Oder gibt es irgendwo eine gemeinsame Auswahlmöglichkeit?

Antwort

2

Sie können alle Debug-Informationen von gemeinsam genutzten Bibliotheken überspringen und nur goocanvas lib-Symbole laden. Hier ist ein Beispiel dafür, wie es in GDB-Sitzung zu tun:

[ ~]$ gdb -q /your/binary 
(gdb) set auto-solib-add off 
(gdb) start 

Temporary breakpoint 1, 0x000055555564edd0 in main() 
(gdb) sharedlibrary goocanvas 

Von gdb doc:

Wenn Ihr Programm viele gemeinsam genutzte Bibliotheken verwendet, um mit Debug-Informationen, dass große Mengen an Arbeitsspeicher nimmt, können Sie Verringern Sie den Speicherbedarf des Gdb-Speichers , indem Sie verhindern, dass die Symbole automatisch von shared libraries geladen werden. Zu diesem Zweck tippe set auto-solib-add off vor mit dem inferior, dann lade jede Bibliothek, deren Debugsymbole du brauchst mit sharedlibrary regexp, wobei regexp ein regulärer Ausdruck ist, der den Bibliotheken entspricht, deren Symbole du sein willst geladen.

Siehe auch diese Frage im Zusammenhang: How to prevent GDB from loading debugging symbol for a (large) library?