Inhaltsverzeichnis
GDB-Debugger-Grundlagen" >GDB-Debugger-Grundlagen
GDB-Debugger-Anwendungsfall" >GDB-Debugger-Anwendungsfall
总结" >总结
Heim System-Tutorial LINUX Das Evangelium des Debuggens von C-Programmen unter Linux – gdb

Das Evangelium des Debuggens von C-Programmen unter Linux – gdb

Feb 11, 2024 pm 08:12 PM
linux linux教程 linux系统 linux命令 shell脚本 Erste Schritte mit Linux Linux-Lernen

Jeder Programmierer, egal wie erfahren er ist, kann Fehler in der Software nicht vollständig vermeiden. Daher ist die Fehlersuche und -behebung zu einer der wichtigsten Aufgaben im Softwareentwicklungszyklus geworden. Während es viele Möglichkeiten gibt, Fehler zu beheben, wie z. B. Tests und Selbstüberprüfung des Codes, kann auch spezielle Debugger-Software dabei helfen, das Problem zu lokalisieren und zu beheben.

Für Programmierer, die die Programmiersprache C/C++ oder Fortran und Modula-2 zum Entwickeln von Software verwenden, gibt es ein hervorragendes Debugger-Tool – GDB – eine gute Nachricht für sie. GDB hilft Programmierern nicht nur dabei, Fehler und andere Probleme in ihrem Code einfacher zu beheben, sondern bietet auch viele nützliche Funktionen und Optionen. In diesem Artikel besprechen wir einige Grundlagen des GDB-Debuggers sowie einige der nützlichen Funktionen und Optionen, die er bietet.

在 Linux 中调试 C 程序的福音——gdb

Bevor wir beginnen, ist es erwähnenswert, dass alle Anweisungen und Beispiele im Artikel auf Ubuntu 14.04 LTS getestet wurden. Die Beispielcodes im Tutorial sind alle in der Sprache C geschrieben; die verwendete Shell ist Bash (4.3.11); die GDB-Version ist 7.7.1.

GDB-Debugger-Grundlagen

Laienhaft ausgedrückt: Mit GDB können Sie den internen Ablauf des Programms während der Ausführung sehen und das Problem identifizieren. Wir werden die Verwendung des GDB-Debuggers anhand eines Arbeitsbeispiels im nächsten Abschnitt besprechen, aber vorher wollen wir einige grundlegende Punkte behandeln, die Ihnen später helfen werden.

Um einen Debugger wie GDB erfolgreich nutzen zu können, müssen Sie zunächst das Programm auf eine bestimmte Weise kompilieren, damit der Compiler die vom Debugger benötigten Debugging-Informationen generiert. Wenn Sie beispielsweise Code mit dem gcc-Compiler kompilieren (den wir später in diesem Tutorial zum Kompilieren der C-Programmbeispiele verwenden werden), müssen Sie die Befehlszeilenoption -g verwenden.

Informationen zur Befehlszeilenoption -g in der Manpage des gcc-Compilers finden Sie hier.

Stellen Sie als Nächstes sicher, dass der GDB-Debugger auf Ihrem System installiert ist. Wenn es nicht installiert ist und Sie ein Debian-basiertes System (z. B. Ubuntu) verwenden, können Sie das Tool einfach mit dem folgenden Befehl installieren:

sudo apt-get install gdb
Nach dem Login kopieren

Informationen zu Installationsmethoden für andere Distributionen finden Sie hier.

Wenn Sie nun das Programm wie oben beschrieben kompiliert haben (Befehlszeilenoption gcc -g) und den GDB-Debugger installiert haben, können Sie das Programm mit dem folgenden Befehl im Debug-Modus ausführen:

gdb [可执行程序的名称]
Nach dem Login kopieren

Dadurch wird der GDB-Debugger initialisiert, aber Ihre ausführbare Datei wird noch nicht gestartet. An dieser Stelle können Sie Debugging-bezogene Einstellungen definieren. Sie können beispielsweise einen Haltepunkt in einer bestimmten Zeile oder Funktion festlegen, damit GDB die Programmausführung in dieser Zeile anhält.

Als nächstes müssen Sie zum Starten Ihres Programms den folgenden gdb-Befehl eingeben und ausführen:

run
Nach dem Login kopieren
Nach dem Login kopieren

Hier ist es erwähnenswert, dass Sie diese Parameter hier angeben können, wenn Ihr Programm einige Befehlszeilenparameter erfordert. Zum Beispiel:

run [参数]
Nach dem Login kopieren

GDB bietet viele nützliche Befehle, die beim Debuggen immer nützlich sein können. Wir werden einige dieser Befehle im nächsten Abschnitt besprechen.

GDB-Debugger-Anwendungsfall

Jetzt haben wir eine grundlegende Vorstellung von GDB und seiner Verwendung. Wenden wir also das Gelernte anhand eines Beispiels an. Hier ist ein Beispielcode:

#include 
int main()
{
    int out = 0, tot = 0, cnt = 0;
    int val[] = {5, 54, 76, 91, 35, 27, 45, 15, 99, 0};

    while(cnt printf("/n Total = [%d]/n", tot);
    return 0;
}
Nach dem Login kopieren

Erklären Sie kurz, was dieser Code bewirkt. Rufen Sie jeden Wert im val-Array ab, weisen Sie ihn der Variablen out zu, fügen Sie dann den Wert vor tot und den Ergebniswert 0xffffffff/out hinzu und weisen Sie ihn der Variablen tot zu.

Das hier aufgetretene Problem besteht darin, dass beim Ausführen des mit diesem Code kompilierten ausführbaren Programms der folgende Fehler generiert wird:

$ ./gdb-testFloating point exception (core dumped)
Nach dem Login kopieren

Um diesen Code zu debuggen, besteht der erste Schritt darin, das Programm mit der Option -g zu kompilieren. Der Befehl lautet wie folgt:

gcc -g -Wall gdb-test.c -o gdb-test
Nach dem Login kopieren

Als nächstes führen wir den GDB-Debugger aus und geben das ausführbare Programm zum Debuggen an. Der Befehl lautet wie folgt:

gdb ./gdb-test
Nach dem Login kopieren

Der Fehler, den ich gerade erhalten habe, ist eine Gleitkomma-Ausnahme, die, wie die meisten von Ihnen wahrscheinlich bereits wissen, durch n % x verursacht wird, wenn x 0 ist. Aus diesem Grund habe ich in Zeile 11, wo die Divisionsoperation stattfindet, einen Haltepunkt hinzugefügt. Wie folgt:

(gdb)&;break 11
Nach dem Login kopieren

Hinweis (gdb) sind die Debugger-Eingabeaufforderungsinformationen. Ich habe nur den Befehl break 11 eingegeben.

Lassen Sie GDB nun mit der Ausführung des Programms beginnen:

run
Nach dem Login kopieren
Nach dem Login kopieren

Wenn der Haltepunkt zum ersten Mal erreicht wird, zeigt GDB die folgende Ausgabe an:

Breakpoint 1, main () at gdb-test.c:11
11 tot = tot + 0xffffffff/out;
(gdb)
Nach dem Login kopieren

Wie Sie sehen können, zeigt der Debugger die Codezeile an, in der sich der Haltepunkt befindet. Lassen Sie uns nun den aktuellen Wert ausdrucken. Wie folgt:

(gdb) print out
$1 = 5
(gdb)
Nach dem Login kopieren

如上所示,值 5被打印出来了。这个时候一切都还是正常的。让调试器继续执行程序直到命中下一个断点,可以通过使用 c 命令来完成:

c
Nach dem Login kopieren

重复上述操作,直到 out值变为0 时。

...
...
...
Breakpoint 1, main () at gdb-test.c:11
11 tot = tot + 0xffffffff/out;
(gdb) print out
$2 = 99
(gdb) c
Continuing.

Breakpoint 1, main () at gdb-test.c:11
11 tot = tot + 0xffffffff/out;
(gdb) print out
$3 = 0
(gdb)
Nach dem Login kopieren

现在,为了进一步确认问题,我使用 GDB 的s (或 step) 命令代替 c 命令。因为,我只想让当前程序在第 11 行之后暂停,再一步步执行,看看这个时候是否会发生崩溃。

以下是执行之后输出信息:

(gdb) s

Program received signal SIGFPE, Arithmetic exception.
0x080484aa in main () at gdb-test.c:11
11 tot = tot + 0xffffffff/out;
Nach dem Login kopieren

是的,如上输出的第一行内容所示,这就是抛出异常的地方。当我再次尝试运行s 命令时,问题最终也得到了确认:

(gdb) s

Program terminated with signal SIGFPE, Arithmetic exception.
The program no longer exists.
Nach dem Login kopieren

通过这种方式,你就可以使用 GDB 调试你的程序。

总结

GDB 提供了很多功能供用户研究和使用,在这里,我们仅仅只介绍了很少一部分内容。通过 GDB 的手册页可以进一步了解这个工具,当你在调试代码的时候,尝试使用一下它。GDB 调试器有一定的学习难度,但是它很值得你下功夫学习。

Das obige ist der detaillierte Inhalt vonDas Evangelium des Debuggens von C-Programmen unter Linux – gdb. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Deepseek Web Version Eingang Deepseek Offizielle Website Eingang Deepseek Web Version Eingang Deepseek Offizielle Website Eingang Feb 19, 2025 pm 04:54 PM

Deepseek ist ein leistungsstarkes Intelligent -Such- und Analyse -Tool, das zwei Zugriffsmethoden bietet: Webversion und offizielle Website. Die Webversion ist bequem und effizient und kann ohne Installation verwendet werden. Unabhängig davon, ob Einzelpersonen oder Unternehmensnutzer, können sie massive Daten über Deepseek problemlos erhalten und analysieren, um die Arbeitseffizienz zu verbessern, die Entscheidungsfindung zu unterstützen und Innovationen zu fördern.

So installieren Sie Deepseek So installieren Sie Deepseek Feb 19, 2025 pm 05:48 PM

Es gibt viele Möglichkeiten, Deepseek zu installieren, einschließlich: kompilieren Sie von Quelle (für erfahrene Entwickler) mit vorberechtigten Paketen (für Windows -Benutzer) mit Docker -Containern (für bequem am besten, um die Kompatibilität nicht zu sorgen), unabhängig von der Methode, die Sie auswählen, bitte lesen Die offiziellen Dokumente vorbereiten sie sorgfältig und bereiten sie voll und ganz vor, um unnötige Schwierigkeiten zu vermeiden.

Bitget Offizielle Website -Installation (2025 Anfängerhandbuch) Bitget Offizielle Website -Installation (2025 Anfängerhandbuch) Feb 21, 2025 pm 08:42 PM

Bitget ist eine Kryptowährungsbörse, die eine Vielzahl von Handelsdienstleistungen anbietet, darunter Spot -Handel, Vertragshandel und Derivate. Der 2018 gegründete Austausch hat seinen Hauptsitz in Singapur und verpflichtet sich, den Benutzern eine sichere und zuverlässige Handelsplattform zu bieten. Bitget bietet eine Vielzahl von Handelspaaren, einschließlich BTC/USDT, ETH/USDT und XRP/USDT. Darüber hinaus hat der Austausch einen Ruf für Sicherheit und Liquidität und bietet eine Vielzahl von Funktionen wie Premium -Bestellarten, gehebelter Handel und Kundenunterstützung rund um die Uhr.

Ouyi OKX Installationspaket ist direkt enthalten Ouyi OKX Installationspaket ist direkt enthalten Feb 21, 2025 pm 08:00 PM

Ouyi Okx, die weltweit führende digitale Asset Exchange, hat jetzt ein offizielles Installationspaket gestartet, um ein sicheres und bequemes Handelserlebnis zu bieten. Auf das OKX -Installationspaket von Ouyi muss nicht über einen Browser zugegriffen werden. Der Installationsprozess ist einfach und einfach zu verstehen.

Holen Sie sich das Installationspaket Gate.io kostenlos Holen Sie sich das Installationspaket Gate.io kostenlos Feb 21, 2025 pm 08:21 PM

Gate.io ist ein beliebter Kryptowährungsaustausch, den Benutzer verwenden können, indem sie sein Installationspaket herunterladen und auf ihren Geräten installieren. Die Schritte zum Abholen des Installationspakets sind wie folgt: Besuchen Sie die offizielle Website von Gate.io, klicken Sie auf "Download", wählen Sie das entsprechende Betriebssystem (Windows, Mac oder Linux) und laden Sie das Installationspaket auf Ihren Computer herunter. Es wird empfohlen, die Antiviren -Software oder -Firewall während der Installation vorübergehend zu deaktivieren, um eine reibungslose Installation zu gewährleisten. Nach Abschluss muss der Benutzer ein Gate.io -Konto erstellen, um es zu verwenden.

Ouyi Exchange Download Official Portal Ouyi Exchange Download Official Portal Feb 21, 2025 pm 07:51 PM

Ouyi, auch bekannt als OKX, ist eine weltweit führende Kryptowährungsplattform. Der Artikel enthält ein Download -Portal für das offizielle Installationspaket von Ouyi, mit dem Benutzer den Ouyi -Client auf verschiedenen Geräten installiert werden können. Dieses Installationspaket unterstützt Windows, Mac, Android und iOS -Systeme. Nach Abschluss der Installation können sich Benutzer registrieren oder sich beim Ouyi -Konto anmelden, Kryptowährungen mit dem Handel mit den von der Plattform erbrachten Diensten anmelden.

Gate.io Official Website Registration Installation Paket Link Gate.io Official Website Registration Installation Paket Link Feb 21, 2025 pm 08:15 PM

Gate.io ist eine hochgelobte Kryptowährungshandelsplattform, die für ihre umfangreiche Token-Auswahl, niedrige Transaktionsgebühren und eine benutzerfreundliche Schnittstelle bekannt ist. Mit seinen fortschrittlichen Sicherheitsfunktionen und dem hervorragenden Kundenservice bietet Gate.io Händlern ein zuverlässiges und bequemes Handelsumfeld für Kryptowährung. Wenn Sie sich mit gate.io anschließen möchten, klicken Sie bitte auf den Link zum Herunterladen des offiziellen Registrierungsinstallationspakets, um Ihre Kryptowährungshandelsreise zu starten.

Wie installiere ich PhpMyAdmin mit Nginx auf Ubuntu? Wie installiere ich PhpMyAdmin mit Nginx auf Ubuntu? Feb 07, 2025 am 11:12 AM

Dieses Tutorial führt Sie durch die Installation und Konfiguration von Nginx und PhpMyAdmin auf einem Ubuntu -System, möglicherweise neben einem vorhandenen Apache -Server. Wir werden das Einrichten von NGINX abdecken, potenzielle Portkonflikte mit Apache auflösen, MariADB (installieren

See all articles