Widerspruch gegen gdb Muster

Um die core_pattern dauerhaft zu machen und Neustarts zu überleben, können Sie sie über «kernel.core_pattern» in /etc/sysctl.conf festlegen. Die /proc/…/core_pattern ist auf «core» festgelegt, wodurch eine Core-Dump-Datei namens «core» im aktuellen Verzeichnis gelöscht wird. Das wird vorerst in Ordnung sein, aber ich werde zeigen, wie sie für einen globalen Standort eingerichtet werden: Sie können diese core_pattern weiter anpassen; z. B. %h für Hostname und %t für die Zeit des Dumps. Die Optionen werden in der Linux-Kernelquelle unter Documentation/sysctl/kernel.txt dokumentiert. cscope lesen Sie hierfür /usr/include/term.h. Also, mehr Makros. Ich musste in Fettweise die Zeile des Codes hervorheben, die ich denke, dass dort wirksam wird. Warum gibt es ein «wenn 0 && !0 … elif 0»? Ich weiß es nicht (ich müsste mehr Quelle lesen). Manchmal verwenden Programmierer «#if 0» um Debugcode, den sie in der Produktion deaktivieren möchten, aber dies sieht automatisch generiert aus.

Beispielsequenz eines Schreibaufrufs, Dateideskriptor 3, Puffer ist an der Zieladresse 0x1234, 6 Bytes sollten geschrieben werden: Es wurde ein «dummer Tanz» mit Aufrufen set_curterm() mit einem Nullzeiger. Der Pfeil «>» zeigt die Codezeile an, in der wir abgestürzt sind. Es wird noch besser: Mit dem Layout-Split-Befehl können wir der Quelle mit der Demontage in separaten Fenstern folgen: Es lohnt sich zu zeigen, wie das in der gdb Text-Benutzeroberfläche (TUI) aussieht, die ich nicht so viel benutzt habe, aber inspiriert wurde, nachdem ich Gregs Vortrag gesehen hatte. Ich führe gdb aus, sete einen Haltepunkt auf set_curterm(), und führe ihn auf den Nullaufruf: Gibt es etwas Besonderes an back_color_erase? Wir befinden uns in ClrBlank(), also werde ich diesen Quellcode auflisten: . Stapelspuren zeigen, wie wir an den Punkt des Scheiterns gelangt sind, und sind oft genug, um ein häufiges Problem zu identifizieren. Es ist in der Regel der erste Befehl, den ich in einer gdb-Sitzung verwende: bt (kurz für Backtrace): Ok, mehr Hinweise… Ich denke. Wir befinden uns in llvm::sys::Process::FileDescriptorHasColors(). Der llvm-Compiler? Es beschwert sich über keine Python-Quelle. Ich könnte das beheben, aber wir stürzen in libncursesw ab. Durch Drücken von Enter kann das Laden beendet werden, an welchem Punkt es den libncursesw-Debug-Info-Quellcode lädt: Die Python-Debugpakete haben gdb weitere Funktionen hinzugefügt. Jetzt können wir uns die Python-Backtrace ansehen: Greg demonstrierte dies mit Umgekehrtem Stepping, so dass Sie sich vorstellen können, code- und Assemblyausführung gleichzeitig zu verfolgen (ich würde ein Video benötigen, um das hier zu demonstrieren).

Wenn Sie neu bei bcc sind, lohnt es sich, es auszuchecken.