Echte Programmierer benutzen Debugger? [geschlossen]


15

Wenn erfahrene Programmierer tatsächlich jemals Debugger verwenden, und wenn ja, unter welchen Umständen? Obwohl ich in der Antwort auf diese Frage vor "Monaten" gesagt habe, habe ich wahrscheinlich "Jahre" gemeint - ich benutze wirklich keinen Debugger. Meine spezielle Frage lautet also, unter welchen Umständen Sie als erfahrener Programmierer einen Debugger verwenden würden.


14
Es ist wie zu fragen, ob erfahrene Programmierer Tastaturen verwenden. Ich verstehe nicht, was Erfahrung damit zu tun hat. Glauben Sie, dass sie Götter sind und von Anfang an einwandfrei funktionierenden Code ohne Fehler erstellen? Und selbst wenn ja, was bedeutet das für Sie? Werden Sie aufhören, Debugger zu verwenden, wenn Sie es brauchen, und sagen: "Ich benutze keinen Debugger, also bin ich ein echter Programmierer" ... :) Übrigens. Ich bezweifle, dass ein Fachmann eine solche Frage beantworten wird ...

3
@Wooble: Die Grundfrage "Verwenden erfahrene Programmierer Debugger?" Ist eine gute. Es überraschte mich tatsächlich, dass es einen kleinen heiligen Krieg auslöste.
Kevin

19
Echte Programmierer benutzen natürlich Schmetterlinge
Rein Henrichs

4
Die meisten vorhandenen Debugger sind altmodisch, haben beschissene Schnittstellen und erfordern, dass der Programmierer Konzepte und Paradigmen kennt und versteht, die schwer zu beherrschen sind. Infolgedessen sind die meisten modernen, erfahrenen Programmierer sehr bemüht, die Fähigkeiten zu erlernen, die erforderlich sind, um die Art von Code zu schreiben, der selten in einem Debugger debuggt werden muss, um die Qual der Erfahrung zu vermeiden. Also "yes they use it" und "so wenig wie möglich"
blueberryfields

7
Erfahrene Programmierer, die "keine Debugger verwenden", denken wahrscheinlich in Bezug auf gdb / SoftICE und haben nie einen tatsächlichen integrierten Debugger verwendet (und verwenden wahrscheinlich auch keine IDE). Sie sind so weit hinter der Zeit zurück, dass es schmerzhaft ist.
BlueRaja - Danny Pflughoeft

Antworten:


44

Ich würde sagen, dass der Verzicht auf einen Debugger ein Zeichen von Unerfahrenheit ist. Das zeilenweise Durchlaufen des Codes ist die beste Möglichkeit, den Ausführungsfluss zu verfolgen.


30
seltsam, dass ich nach über 30 Jahren Programmieren in Assembler, Fortran, C, C ++ usw. usw. keine Lust habe, eine zu verwenden.

59
Etwas für eine lange Zeit zu tun, macht dich nicht unbedingt gut darin.
ceejayoz

31
Nicht zu der Möglichkeit , einen Debugger zu verwenden , ist ein Zeichen von Unerfahrenheit. Den Ablauf eines Programms durch einfaches Lesen von Code zu verstehen, ist nicht so. Natürlich benötigen erfahrene Programmierer gelegentlich den Debugger, aber wenn Sie den Code lesen können, ist dies nicht erforderlich, und das Debuggen wird auch nicht schneller.
GolezTrol

10
@ Karl Bielefeldt: Lassen Sie mich einige berühmte Beispiele von Programmierern nennen, die keine Debugger zum Debuggen verwenden. Linus Torvalds, Autor von Linux. Larry Wall, Autor von Perl. Komplex genug für Sie?
Mittwoch,

9
@Neil: Wie viel Zeit verbringst du mit der Arbeit an deinem eigenen Code und wie viel mit der Pflege von Code, der von anderen Leuten geschrieben wurde? Und insbesondere, wie viel Pflegecode von anderen Leuten geschrieben wurde, denen es niemals in der Nähe einer Programmiersprache hätte gestattet sein dürfen?
Carson63000

28

Ich benutze den Debugger oft, weil ich auf einem großen System arbeite und deshalb nerve. http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html

Egal wie kurz und häufig Ihr Code ist, es besteht immer die Möglichkeit, dass er Fehler enthält. http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html

Sich zu irren ist menschlich und man kann niemals beweisen, dass ein Programm korrekt ist. Warum also nicht Tools wie Debugger / automatisierte Tests verwenden, um uns in diesem schwierigen Geschäft zu unterstützen?

Wenn der Code kurz genug ist, reichen einfache Tests aus. Auch wenn es kurz ist und Sie die Art des Fehlers kennen, kann das Lesen des Codes ausreichen. Wenn die Codebasis jedoch groß ist, mehrere Sprachen gemischt sind und drei Ebenen umfasst, müssen Sie einfach eine gute Testabdeckung auf vielen Ebenen sowie einen sehr guten Debugger haben - andernfalls werden Sie viel Zeit verschwenden.

Wann brauche ich keinen Debugger?

Ich bin weder der klügste noch der erfahrenste Programmierer, aber manchmal muss ich den Debugger nicht verwenden. Das ist wenn:

  • Der Code ist meins oder gut geschrieben und
  • Es ist in einer lesbaren Sprache geschrieben UND
  • Das Gesamtprojekt ist klein.

Wann verlasse ich mich stark auf einen Debugger?

  • Kurze Antwort: oft .
  • Wenn eine Anwendung abstürzt. Besonders wenn es eingesetzt wird. Wenn VS2010 auf diesem Computer installiert ist, kann dies einen Unterschied zwischen "Unbekannter Fehler" und "Fehler" bewirken FileNotFoundException.
  • Wenn eine Bibliothek eines Drittanbieters abstürzt oder sich nicht richtig verhält.
  • Wenn der Code schlecht geschrieben ist. Insbesondere, wenn dieselbe Datei in den letzten 10 Jahren von 10 verschiedenen Personen berührt wurde, von denen 7 nicht mehr im Unternehmen sind.
  • Wenn das Projekt groß ist
  • Wenn der Code eher monolithisch ist.
  • Bei mehreren Ebenen (GUI, SQL, BL).

Beachten Sie, dass "Debugger" auf mehr als ein Tool verweisen kann. Ich benutze den Visual Studio-Debugger, den SQL-Debugger (meistens für gespeicherte Prozesse) und den SQL-Profiler (um herauszufinden, welche SP aufgerufen werden). Benötige ich Tools dieses Kalibers, die ich gerade für ein schnelles sysadmin-artiges Python-Skript geschrieben habe? Nein. Wenn ich mein eigenes kleines GUI-basiertes Tool erstellt hätte? Hängt davon ab. Wenn es .Net WinForms ist - wahrscheinlich nicht. Wenn es WPF ist - ja.

Was macht eigentlich einen "echten" Programmierer aus? Eine, die schnell ist? kenntnisreich? Kann man Algorithmen gut? Schreibt eine gute Dokumentation? Wann genau schließt man diesen neuen Titel ab? Wann überschreitet man die magische Grenze?

Ich würde sagen, dass ein Programmierer, der sich in mehr als 100 Mannjahren nicht die Hände schmutzig gemacht hat, keine Chance hatte, sich von der Komplexität und den eigenen Einschränkungen (sowie von der frustrierten Codequalität) demütigen zu lassen.

Ich persönlich versuche, den besten Debugger zu verwenden, der mir zur Verfügung steht, und ich benutze ihn häufig. Wenn eine Aufgabe einfach genug ist und keinen Debugger erfordert, verwende ich sie dann nicht. Es dauert nicht lange, um herauszufinden, ob ich einen brauche oder nicht.

...

Jetzt konnte ich theoretisch die Codebasis so lange lesen, dass ich sie einfach bekam. Die praktische Herangehensweise funktioniert jedoch am besten, und ich möchte oft den blöden Code, den ich sehe, neu schreiben. Leider würde ich mehr als 10 Jahre brauchen, um die Codebasis, in der ich mich befinde, zu bereinigen. Die Verwendung des Debuggers ist daher ein offensichtlicher erster Schritt. Nur wenn ich herausfinde, welche von 5 Millionen Codezeilen aktiv ist, würde ich die Datei nach oben und unten durchsuchen, um herauszufinden, was diese Klasse tut.


+1, sehr gute Antwort, ich stimme dem Aspekt "Wenn es um mehrere Ebenen geht" besonders zu, der von den Befürwortern "nur den Code lesen und den Fehler finden" selten erwähnt wird.
Carson63000

Ich bin froh, dass du das Ganze lesen konntest.
Job

+1 für eine gute Antwort und zur Überprüfung der Definition eines "echten Programmierers". Die Verwendung dieses Ausdrucks machte die OP schlau, interessant und potenziell entzündlich (aufgrund verunglimpfter Implikationen oder Anspielungen).
Smandoli

1
"Man kann niemals beweisen, dass ein Programm korrekt ist" Das ist nicht wahr.
GManNickG

1
@GMan, bitte erläutern Sie Ihre Aussage. Wie ich erfahren habe, sind viele frühere Versuche, die Richtigkeit eines kurzen Codeausschnitts für eine bestimmte Sprache zu beweisen, fehlgeschlagen, z. B. wurden mehrere Bugs gefunden, nachdem der Proof abgeschlossen wurde (von einem auf solche Proofs spezialisierten Professor). Ich nehme an, einige sehr triviale Programme haben sich als richtig erwiesen. Ich bin neugierig, Ihren Blickwinkel hier herauszufinden.
Job

17

"Ich mag Debugger nicht. Habe ich nie, werde ich wahrscheinlich nie." - Linus Torvalds

Andererseits hat er kein Stack Overflow-Konto, daher bin ich mir nicht sicher, ob Sie an seiner Meinung interessiert sind :)


3
Nicht viele von uns sind Linus Torvalds, für den Rest von uns Menschen brauchen wir den Debugger.
Nodey The Node Guy

7
Kernel lehnen sich nicht gut an Debugger an.

7
Ja, die Kernel-Programmierung ist ein anderes Gebiet als die Userspace-Programmierung. Normalerweise stimme ich nicht mit Linus 'Meinungen zum Nutzerbereich überein, aber sie sind definitiv respektabel, wenn es um Kernelspace geht.
Alternative

16
"Ich mag keine Debugger" heißt nicht "Ich benutze keine Debugger". Tatsächlich sagte Linus: "Ich mag Debugger nicht. Habe ich nie, werde ich wahrscheinlich nie. Ich verwende GDB die ganze Zeit, aber ich neige dazu, es nicht als Debugger, sondern als Disassembler für Steroide zu verwenden, die Sie programmieren können." (Ich weiß, dass einige versuchen werden, das zu verdrehen, um zu bedeuten, dass Linus keinen Debugger verwendet, aber das ist nicht korrekt.)
Kristopher Johnson

6
Es scheint, als ob Linus Torvalds und ich uns in nichts einig sind.
BlueRaja - Danny Pflughoeft

12

Meine spezifische Frage lautet also, unter welchen Umständen Sie als erfahrener Programmierer einen Debugger verwenden würden.

  • Wenn Sie nicht in der Lage sind, durch Lesen Ihres Codes zu "debuggen" .
  • Wenn Sie nicht vorhersagen können, welche Werte bestimmte Variablen zu einem bestimmten Zeitpunkt haben.
  • Wenn Ihr mentales Modell Ihres Codes nicht zur Ausgabe Ihres Codes passt

Bearbeiten:

Ich hatte das Glück / Unglück, nicht zu wissen, wie ich einen Debugger auf meiner Programmierreise einsetzen sollte. So war ich in der Vergangenheit gezwungen, ohne Debugger zu debuggen. Nachdem ich jedoch gelernt habe, einen Debugger zu verwenden -> bin ich 100- mal produktiver beim Auffinden von Fehlern geworden.


+1 für "Wenn Ihr mentales Modell Ihres Codes nicht mit der Ausgabe Ihres Codes
Benutzer

8

Eine etwas andere Perspektive als die aktuellen Antworten zu geben; Als Embedded-Software-Entwickler, der an Systemen arbeitet, die häufig eine Echtzeitkomponente enthalten, verwende ich selten einen Debugger.

Gelegentlich kann ein Debugger ein erstaunliches Werkzeug sein, und wenn ich in der Lage bin, Code auf einem Desktop zu erstellen und auszuführen, verwende ich immer einen Debugger.

On-Chip, mit Echtzeitbeschränkungen, ist der Versuch, einen Debugger zu verwenden, mit einer hohen Belastung verbunden. Sobald Sie die Ausführung unterbrechen, können Sie das Timing des restlichen Systems möglicherweise tödlich beeinflussen. Generell ist printf in unkritischem Code und IO-Wackeln in zeitkritischem Code das beste und tatsächlich einfachste Werkzeug. Es ist nicht so gut wie ein Debugger, aber es ist viel billiger, mit einem echten System zu arbeiten.


1
Vielleicht möchten Sie Hardware-basierte Debugger-Boards untersuchen
Steven A. Lowe

@Steven danke; Leider haben einige der Systeme, an denen ich arbeite, eine geeignete Hardwareunterstützung, andere nicht. Während wir in der Regel die Option eines Logikanalysators haben, ist dies in der Regel noch zeitaufwändiger.
Luke Graham

Ich bin genau das Gegenteil. Ich verwende einen Debugger viel häufiger auf eingebetteten Systemen. Ich bin damit einverstanden, das Timing zu stören. Das Herausfiltern und / oder Minimieren der Änderungen, die durch das Einfügen eines Debuggers in die Schleife verursacht werden, erfordert einen beträchtlichen Aufwand.
Karl Bielefeldt

7

Ich denke, erfahrene Programmierer verwenden fast ausschließlich Debugger, wenn sie gebraucht werden. Gibt es eine bessere Möglichkeit, einen Fehler aufzuspüren, als die Ausführung des Codes tatsächlich zu verfolgen?

Gehen Sie davon aus, dass die Skeets der Welt keine Fehler machen oder einfach alles wissen? Alle bis auf die einfachsten Programme verhalten sich unter bestimmten Umständen unerwartet. Es ist selbstverständlich, dass Probleme untersucht werden müssen. Die Auswahl besteht also darin, print-Anweisungen an einem Ende des Spektrums zu verwenden oder zu untersuchen, was passiert ist, post mortem, auf der anderen Seite, oder genau in die Mitte zu schauen, während der Code ausgeführt wird und herauszufinden, was vor sich geht.

Vielleicht ist es eine bessere Art, darüber nachzudenken, dass erfahrene Programmierer wissen, wann sie einen Debugger verwenden müssen. In Code mit wenigen Abhängigkeiten reicht es wahrscheinlich aus, einen Stack-Trace zu betrachten, um herauszufinden, was falsch ist. Es gibt jedoch komplizierte Szenarien, in denen Ihr Code mit anderem Code zusammenarbeitet und Sie einen Debugger benötigen, um sich die Dinge anzusehen, die Sie nicht geschrieben haben.


4
Genau das versuche ich zu untersuchen - ich bin ein äußerst erfahrener Programmierer und verwende nie einen.

5
@neil, vielleicht brauchst du das nicht. Seien Sie versichert, wird die Zeit kommen , wo der Debugger ist der einfachste Weg sein , auf den Grund eines Problems zu bekommen, ob Sie tatsächlich am Ende ein mit ....
hvgotcodes

Ich kann Sachen lesen, die ich auch nicht geschrieben habe. Und wenn ich nicht kann, ist es gewöhnlich, weil es schlechter Code ist. In anderen Fällen verwende ich den Debugger.
GolezTrol

Wenn die von Ihnen verwendete Sprache Ausnahmen unterstützt und Sie diese + ein geeignetes Protokollierungsframework (z. B. log4j oder ähnliches) verwenden, erhalten Sie immer einen Stack-Trace, der auf die Fehlerzeile verweist. In 99% der Fälle handelt es sich um eine Nullzeiger-Ausnahme, mit der Sie nicht gerechnet haben. Was wird Ihnen ein Debugger noch sagen? Als ich in c programmierte, gab es Dinge, die Sie ohne einen Debugger einfach nicht finden konnten (z. B. Stapelbeschädigung). Aber solche Dinge passieren einfach nicht mehr in Hochsprachen.
Kevin

1
@ Kevin, richtig, ich denke, es gibt eine Reihe von Problemen zwischen diesen beiden, bei denen der Debugger der natürlichste Weg ist, um einem Problem auf den Grund zu gehen. Vielleicht möchte ich die dynamischen Eigenschaften eines Objekts in einem dynamischen Sprachrahmen wie Grails sehen. Vielleicht möchte ich genau sehen, wo etwas, von dem ich denke, dass es nicht null ist, zu null gemacht wird (NPE sagt Ihnen, wo die Ausnahme ist, nicht warum das Ding null ist). Vielleicht möchte ich, dass mein Debugger bei einer Ausnahme pausiert, damit ich sehen kann, welche Codekombination eine Ausnahme verursacht hat, und nicht nur, dass sie im Stacktrace aufgetreten ist.
hvgotcodes

4

Das tue ich nicht und ich programmiere seit über 10 Jahren. Früher habe ich in C / C ++ programmiert. Jetzt programmiere ich in Java. Die Wahrheit ist, dass Sie bei korrekter Protokollierung einen Stack-Trace erhalten, der für die meisten erfahrenen Entwickler ausreicht. Auch wenn Sie (gute) Komponententests und Funktionstests schreiben, werden eine ganze Klasse von Fehlern beseitigt.


Wenn es mehr klarstellt, kenne ich viele Java-Programmierer, die einen Debugger verwenden. Sie sind meistens gleich nach der Schule.
Kevin

1
Stacktraces zeigen keine Daten an - Sie müssen diese Informationen selbst hinzufügen -, aber dann sind sie reines Gold.

1
@ Thorbjørn: Sie können tatsächlich Daten anzeigen : siehe z. B. das cgitb- Modul von Python . (Das CGI im Namen ist größtenteils ein Überbleibsel. Der ursprüngliche Zweck des Moduls bestand darin, bei einem Absturz eines CGI verwendbare Stack-Traces darzustellen.) Natürlich erhalten Sie dabei manchmal so viele Daten, dass es schwierig wird, zum Stack zu navigieren Rahmen von Interesse. Ich liebe es cgitb.enable(format='text')trotzdem.
SamB

Ich benutze nicht wirklich Debugger und ich benutze C ++ ..
Nikko

@ SamB Kevin sprach über Java, das kann nicht

4

Wen interessiert das? Was ich wissen möchte, ist, dass die Verwendung eines Debuggers mich langfristig daran hindert, ein besserer Programmierer zu sein. Vielleicht waren Debugger von geringerer Qualität, als viele erfahrene Entwickler begannen, so dass sie hinderlich waren. Ist es eine Krücke, die ein tieferes Verständnis verhindert?

Ein Programmierer, wahrscheinlich besser als der Rest von uns, fand einen Bedarf für einen Debugger und baute einen (Keine Ahnung, wer den ersten erstellt hat.). Ich bin sicher, dass sie dadurch produktiver waren. Ich bezweifle, dass die Motivation darin bestand, niederen Sterblichen das Schreiben von Code zu ermöglichen.


3

Selten.

Ihre Methoden sollten klein / einfach genug sein, um von Ihrem Verstand kompiliert und ausgeführt zu werden. Unit-Tests sollten die Funktionalität abdecken. Wenn Sie einen Fehler finden, schreiben Sie einen Test. Führen Sie es aus, beheben Sie es.

Ich benutze den Debugger normalerweise nur, wenn ich unerwartetes Verhalten von nicht testbarem Code wie dem ASP.NET-Framework habe.


3
Es gibt einige echte Hasser Noobs in diesem Thread ...

2
KEIN Grund, dies abzustimmen - er hat Recht.
Wadesworld

11
-1, weil diese Behauptung so aussagt, als würde man bei Vegas Geld verdienen, indem man einfach jede Hand gewinnt. Das spiegelt nicht die Realität der Situation wider, und die Behauptung, dass der gesamte Code einfach sein wird, existiert nur in kleinen, isolierten Problemen. Außerdem ignoriert die Behauptung "Ausführen, Beheben" vollständig, wie Sie vorgehen, um das Problem zu beheben. Ich wollte es abrutschen lassen, aber dann unterstellte ich, dass all diejenigen, die nicht einverstanden sind, es wert sind, abgewählt zu werden.
Whatsisname

2
-1: "Ihre Methoden sollten klein / einfach genug sein, um von Ihrem Verstand kompiliert und ausgeführt zu werden." Das heißt, eine Funktion, die länger als 20 Zeilen ist, ist zu lang. Unsinn.
John Dibling

3

In Smalltalk entwickle ich fast ausschließlich im Debugger:

  1. Schreiben Sie einen Test, von dem ich weiß, dass er fehlschlagen wird.
  2. Führen Sie den Test aus. Wenn dies fehlschlägt, wird der Debugger angezeigt.
  3. Schreiben Sie im Debugger den Code, der zum Bestehen des Tests erforderlich ist.
  4. Die Ausführung fortsetzen.
  5. Wenn ich grünes Licht bekomme, gehe zu Schritt 1 mit einem neuen Fehlertest. Ansonsten finde im Debugger heraus, was ich falsch gemacht habe und behebe es.

2

Ich benutze einen Debugger, wenn ich muss. Das ist nicht täglich, aber es kommt gelegentlich vor. Es ist manchmal besser, den Code durchzugehen, um zu sehen, was genau passiert.

Ich muss zugeben, dass ich immer weniger Debugger benutze. Ich habe in Delphi seit über 10 Jahren entwickelt. Ich schreibe auch gespeicherte Prozeduren in PL / SQL. Seit ein paar Monaten bin ich auch PHP-Entwickler.

Ich benutze den Debugger hauptsächlich in beiden Fällen, wenn ich einen unklaren Code finde, der vor Jahren geschrieben wurde und den ich ändern muss. Manchmal hilft es, herauszufinden, wie ein Programm genau funktioniert, wenn der Code schwer zu lesen ist. In PHP ist das kaum nötig, aber in Delphi, das ereignisbasiert ist, hilft es manchmal, wenn Sie ein komplexes Framework haben.

Aber wie Sie sagen, ist die Verwendung des Debuggers eine Ausnahme. Die meisten Probleme werden durch einfaches Lesen des Codes und Beheben von Fehlern gelöst, die Sie (oder jemand anderes) gemacht haben.

Dies gilt jedoch für das Durchlaufen von Code. Ich verwende den Aufrufstapel ziemlich oft, wenn eine Ausnahme auftritt, und setze gelegentlich irgendwo einen Haltepunkt, um eine Variable zu untersuchen. Aber fast immer in einem Code, der sowieso gründlich überarbeitet werden muss.


2

Ich codiere gelegentlich ohne Debugger, aber nur, wenn ich gezwungen bin, mit vorgehaltener Waffe zu arbeiten, d. H. Legacy Embedded Gunge auf einem 8051 oder Z80.

IMHO, Sie benötigen einen Debugger und melden sich bei jedem komplexen Job an. Einmal ist kein Ersatz für das andere. Ein Protokollierungssystem kann nicht helfen, wenn die App beispielsweise einen Treiber einfügt, bei dem der Code nur mit der Hardware interagieren und ein Semaphor festlegen kann.

Ein Debugger kann bei einem Systemfehler nicht helfen, bei dem die Apps ordnungsgemäß funktionieren, je nachdem, wie Sie sie geschrieben haben. Das System funktioniert jedoch aufgrund eines zeitweiligen Kommunikationsprotokollfehlers immer noch nicht.

Also brauche ich den Debugger, um die blöden, krassen Bugs und Hardware-Fehler zu beseitigen. Ich benötige eine gute Protokollierung, um zeitweise Systemintegrationsfehler zu erkennen.

Ich muss beides haben - ich brauche jede Hilfe, die ich bekommen kann!


2
z80 ist groß genug für Debugger. CP / M hatte ZSID.

1

Ich benutze einen Debugger nur, wenn diese Schritte fehlschlagen:

  1. Holen Sie sich den Fehler reproduzierbar. Denken. Dies ist oft alles, was benötigt wird.
  2. Überprüfen Sie alle Stack-Trace und -Protokolle.
  3. Fügen Sie mehr Protokollierung um den anstößigen Code hinzu.

Diese Schritte erledigen 95% aller Fälle. Das bedeutet, dass ich selten einen Debugger verwende, und wenn ich das tue, gibt er mir zu viele Informationen und ich bin in nicht zusammenhängenden Details festgefahren. Dies gilt insbesondere für die Arbeit an einem Multithread-Echtzeitsystem.

Sorgfältig platzierte Protokollierungsanweisungen sind also ein langer Weg.


1

Könnte es einfach sein, dass sehr erfahrene Programmierer mit sehr alten Programmierern identisch sind und sie gelernt haben, zu programmieren und ihre Gewohnheiten zu entwickeln, als Debugger nicht immer verfügbar und manchmal nicht sehr gut waren?

Wenn Sie das printf-Debuggen wirklich gut beherrschen (und in den achtziger Jahren hatten wir keine andere Wahl, als wirklich gut darin zu werden), fügt ein Debugger vielleicht nicht so viel hinzu.


0

Es ist eine Frage der persönlichen Wahl.

Ehrlich gesagt denke ich, dass Debugger in bestimmten Situationen nützlich sind, in denen es sehr hilfreich ist zu wissen, was in einem bestimmten Schritt der Programmausführung auf Ihrem RAM los ist.

Der Hauptnutzen eines Debuggers besteht darin, ein Programm anzuhalten, ohne dass das Programm selbst angehalten werden soll. Diese Funktion ist sehr wichtig.

Abgesehen von diesen beiden Funktionen halte ich einen Debugger nicht für wirklich notwendig. Jedes komplexe Programm, das Sie erstellen, sollte einen "ausführlichen" Modus haben, dh alles, was es mit printf oder std :: cout tut, welche Auswahl es getroffen hat, und viele andere Parameter.

Stellen Sie sich vor, Sie erstellen ein Programm, und der Benutzer hat ein Problem bei der Verwendung: Wie kann er feststellen, ob es so verwendet wird, wie es vorgesehen ist, oder ob es sich bei der Sache, über die er sich beschwert, möglicherweise um einen Fehler handelt?

Debugger sind wie die elektrische Lenkung für Ihr Auto: Es ist bequemer, eine zu haben, aber es wird Ihre Fahrt nicht besser machen.

Bei der Programmierung geht es um Design und Logik. Die Art und Weise, wie Tools Sie beim Verfolgen von Inhalten unterstützen können, macht Sie nicht zu einem besseren Programmierer.

Plus-Debugger sind nützlich für kompilierte Sprachen und weniger für interpretierte.


2
Ich verstehe nicht, was kompiliert oder interpretiert damit zu tun hat.
Michael Burr

gute frage: ich auch nicht.
jokoon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.