Wie die debug-Bibliotheken auf ubuntu
Mein Aktuelles problem mit libwebkitgtk-3.0-0, aber ich denke, das problem ist generisch genug ist.
Meine Anwendung stürzt irgendwo in den webkit-code. Meine Vermutung ist, dass wir etwas tun, dumm und wollen herausfinden, was. Einfachste Sache wird es sein, einen breakpoint zu setzen oder verwenden Sie die debug-version der Bibliothek.
-
Wie bekomme ich den genauen source-code mit der Bibliothek gebaut wurde? Ich bin immer stack-trace nach es steckt der Kern, aber Zeilennummer gdb sagt nicht übereinstimmen mit denen, die ich im code sehen. In anderen Worten, wenn ich install libwebkitgtk-3.0-0 ich möchte den genauen source-code des.
-
Installiert hab ich die debug-version der webkit-Bibliothek. Diese debug-Versionen haben die gleiche Funktionalität, als wenn Sie kompilieren von webkit-mit --enable-debug-flag? Debug-Versionen von webkit aktivieren Sie die Protokollierung basierend auf WEBKIT_DEBUG Umgebungsvariable, aber ich konnte nicht die gleichen logging-auch wenn die debug-version der Bibliothek.
-
Wie der debug-version konnte ich kompilieren? Ich schaffte es zum kompilieren von webkit-auf meinem Rechner und habe versucht, das hantieren mit Last-Pfade und so. Meine Anwendung nicht pickup-neue shared-library, egal was ich mache - ich kann sagen, basierend auf user-agent Signatur. An einem Punkt konnte ich Holen die Bibliothek, aber dann SSL nicht mehr funktioniert. Ein SSL-problem passiert mit GtkLauncher. Also, ich mache Fehler irgendwo.
Danke für die Hinweise.
Du musst angemeldet sein, um einen Kommentar abzugeben.
1) Wenn ich brauche, um zu Graben in eine Bibliothek, die ich installiert, über ein Paket, das erste, was ich tun müssen, ist installieren Sie es von der Quelle. Ich meine configur/make/make install. Ich in der Regel legen Sie den Quellcode in /usr/local/src und installieren es in /usr/local . Dies ist meiner Meinung nach der zuverlässigste Weg, laufen den genauen code für die Sie über die Quelle.
3)
Das klingt wie Sie Tat, was ich oben beschrieben habe. Was Sie tun müssen ist, stellen Sie sicher, dass Ihre software ist mit der include-und link-Verzeichnisse, die das hosting zusammengestellt, debug aktiviert, Bibliothek. Sinn macht sicher, dass -ich/usr/local/include und -L /usr/local/lib flags gesetzt sind, und Sie kommen vor /usr/include und /usr/lib.
Können Sie noch mehr für bestimmte durch entfernen der binären version der Bibliotheken von der ubuntu-installation, so dass Sie sicher, dass die version, die Sie gebaut und installiert, ist die einzige version auf der Festplatte vorhanden. Auf diese Weise werden Sie sicher wissen, dass Sie waren in der Lage, konfigurieren Sie Ihre app zu verwenden, die Bibliothek. Ansonsten werde es nur scheitern, statt Sie ständig Fragen, ob es mit der neuen Bibliothek oder der alten Bibliothek.
2) in der Regel ja. Aber es würde davon abhängen, wie die Bibliothek geschrieben wird, und was die ubuntu packager entschieden haben.
Einmal kompilieren Sie das Programm mit Ihrem lokal integrierten Bibliothek finden Sie, wenn Sie immer die gleichen Fehler ersten. Wenn nicht dann ist das auch ein Punkt. Vielleicht ist das problem behoben haben, da das Letzte mal ubuntu gepackt die Bibliothek. Vielleicht die Bibliothek ist nicht ordnungsgemäß verpackt und dass ist das problem. Könnten Sie sogar neue Fehler, weil die ubuntu packager konfiguriert die Bibliothek eine bestimmte Art und Weise, so dass es funktionieren würde und Sie das nicht tun das gleiche. Sie erhalten interessante führt sowieso.
Glück
TL;DR: Installieren libwebkitgtk-3.0-0-dbg Install libwebkitgtk-3.0-0-dbg http://hostmar.co/software-small, dann haben Sie die nötigen debug-Symbole.
Für debug-Symbole, die Sie nicht haben in der Regel, um aus dem Quellcode installieren.
Wie Sie wissen, um die debug-Symbole für software, Sie erstellen sich selbst, Sie können ausführen von GCC mit
-g
.Installierte software über Ihr Betriebssystem den Paketmanager (die
libwebkitgtk-3.0-0
hier), zumindest für offizielle Pakete gibt es in der Regel auch Pakete die Bereitstellung von debug-Symbolen.Die Sie nicht wirklich brauchen, um einen debug-build, der ein Programm oder eine Bibliothek zu erhalten, eine symbolische stack-trace in
gdb
.gdb
unterstützt auch Dateien mit "add-on" debug-Symbole in/usr/lib/debug
.Sie Ubuntu, nach der tags auf Ihre Frage. Auf Ubuntu, debug-symbol-Pakete sind in zwei Varianten erhältlich:
-dbg
und-dbgsym
. Ein Programm oder eine Bibliothek befindet sich auf/path
bekommt debug-Symbole auf/usr/lib/debug/path
.-dbg
PaketeDiese Pakete sind oft unterschiedlich benannt, die von der entsprechenden Pakete, die Bereitstellung der eigentlichen ausführbaren Dateien oder library-Dateien. Sie werden oft mit dem ähnlich
-dev
Pakete (die header-Dateien) und-doc
Pakete. Ein-dbg
Paket hat manchmal weniger-Bibliothek eine Versionsnummer in den Namen als die eigentliche Bibliothek-Pakete, manchmal deckt Binärdateien in mehreren anderen Paketen.Beispielsweise
libgtkmm-3.0-1
's entsprechende-dbg
Paket istlibgtkmm-3.0-dbg
.Auf der anderen Seite, manchmal eine
-dbg
Paket den gleichen Namen wie das Paket, dessen Symbole, die es bietet (mit Ausnahme der-dbg
suffix). Zum Beispiel,libwebkitgtk-3.0-0
's entsprechende-dbg
Paket istlibwebkitgtk-3.0-0-dbg
. Das ist die, die Sie wollen.Können Sie es installieren, in der Software-Center oder durch ausführen von:
Nun, wenn im Debugger ein Programm, dass links auf eine Bibliothek von
libwebkitgtk-3.0-0
,gdb
lädt automatisch die Symbole aus einer Datei zur Verfügung gestellt vonlibwebkitgtk-3.0-0-dbg
.-dbgsym
PaketeManchmal binären ausführbaren Dateien, die von einem offiziellen Paket nicht haben Symbole in einer beliebigen
-dbg
Paket. Wenn dies geschieht, kann man in der Regel installieren Sie die-dbgsym
Paket.Im Gegensatz zu
-dbg
Pakete-dbgsym
Pakete:X-dbgsym
woX
ist das Paket bietet das Programm oder die Bibliothek selbst.-dbg
Pakete.Seit
-dbgsym
- Pakete sind in separaten repositories ermöglichen, müssen Sie diese Repositorys. Ihre DEB-Linien sind:Um diese zu aktivieren, können Sie diese Befehle ausführen (adaptiert von DebuggingProgramCrash von "Die Autoren des Ubuntu Dokumentations-wiki", Abschnitt 2):
Lassen Sie sich die Kursiv Linien, wenn Sie auf einem Entwicklungs-release (alpha oder beta). Stellen Sie sicher, um Sie hinzuzufügen, wenn Sie weiterhin mit dem release einmal stabil, obwohl.
Diese Befehle drei Dinge tun:
/etc/apt/sources.list.d/ddebs.list
(enthält die DEB-Linien).Also, wenn Sie jemals wollen, verwenden Sie die
-dbgsym
-vorausgesetzt, die Symbole anstelle der-dbg
bereitgestellt-Symbole, die-dbgsym
- Paket fürlibwebkitgtk-3.0-0
ist (in übereinstimmung mit der einfachen Namenskonvention oben)libwebkitgtk-3.0-0-dbgsym
.Können Sie beides haben
-dbg
und-dbgsym
Pakete auf dem gleichen system installiert, aber nicht, wenn Sie Symbole für alle die gleichen Dateien. Solibwebkitgtk-3.0-0-dbg
undlibwebkitgtk-3.0-0-dbgsym
Konflikt mit einander; Sie können nicht beide installiert sein (zur gleichen Zeit).Mit Hilfe der Symbole
Auf den meisten Unix-ähnlichen Betriebssysteme, wird der debugger automatisch installiert Symbole. Ubuntu ist das nicht anders--in Ubuntu
gdb
sucht automatisch für Sie in/usr/lib/debug
. So brauchen Sie nicht, etwas besonderes zu tun.Jedoch, wenn Sie jemals brauchen, um sagen
gdb
zum laden einer bestimmten debug-symbol Datei, die Sie verwenden würden, die-s file
Flagge. Sehen das GNU-Handbuch und gdb(1) für details.libarchive13
haben weder-dbg
noch-dbgsym
....@Eliah Antwort sagt, wie man Symbole in eine bequeme Möglichkeit.
Bleibt die Frage, "wie bekomme ich den genauen source-code?".
Ich normalerweise nicht
apt-get source <pkgname>
welches gut und gut, außer dann muss ich manuell sagen gdbdir <path-to-wherever-I-put-the-source>
und wehe dem, wenn es ein Paket wie eglibc wo muss man herausfinden, dass die Pfad-Verweise werden aus dennss
Unterverzeichnis, nicht die Wurzel.Auf RHEL man macht einfach z.B.
yum install --enable-repo rhel-debuginfo libX11-debuginfo
(nuryum install libX11-debuginfo
auf CentOS 7) und sofort bekommen Sie die volle Symbole und die Quelle in gdb keine weiteren Herumspielen. Ich bin noch auf der Suche für die Bequemlichkeit auf Ubuntu.gdb --fullname --nx --directory (relative_path_to_library_source)
-- siehe hierUm zu Debuggen gegen dynamische Bibliotheken können Sie die dgb-Getriebe mit symbol-und source-Distribution Pakete wie vorgeschlagen.
Dann ist es notwendig zu prüfen, wenn die Zusammenstellung der Verzeichnisse der debug-symbol-Tabelle entspricht die Pfade der installierten Quelle, wenn es nicht sollten Sie die Zuordnung der Pfade in gdb. Folgende Befehle, um das Debuggen von glibc