Ich weiß, dass es viele beliebte und nützliche Design Patters gibt.
Gibt es so etwas auch für Debugging-Szenarien? Vielleicht keine Muster, aber Methoden, die kategorisiert sind und die wiederholt für ähnliche Fälle verwendet werden können.
Ich weiß, dass es viele beliebte und nützliche Design Patters gibt.
Gibt es so etwas auch für Debugging-Szenarien? Vielleicht keine Muster, aber Methoden, die kategorisiert sind und die wiederholt für ähnliche Fälle verwendet werden können.
Das sind nur ein paar, die ich gefunden habe:
Mehr dazu finden Sie auf meiner Website unter Softwareentwicklung -> Debugging, falls Sie daran interessiert sind.
Dies ist eigentlich keine Debugging-Technik, aber ich denke, wir müssen eine Debugging-Voraussetzung erwähnen, die, wenn sie nicht erfüllt ist, Ihre Arbeit sehr erschweren wird.
Eine sinnvolle Fehlersuche ist erst möglich, wenn der Fehler reproduzierbar ist und ein Schritt-für-Schritt-Rezept vorliegt. Wenn Sie einen schlechten Fehlerbericht bekommen, kann es sein, dass Sie das Rezept selbst herausfinden müssen, aber wenn Sie jemanden unterstützen, sollten Sie ihn wissen lassen, dass es länger dauern wird, das Rezept herauszufinden, als wenn er es für Sie tut, und dass es vielleicht sogar unmöglich ist. Ein nützlicher Fehlerbericht muss die drei Fragen beantworten, die ich die Fehlerbericht-Formel nenne: 1) Was haben Sie getan? 2) Was haben Sie erwartet, was passieren würde? 3) Was ist stattdessen passiert?
Natürlich sind einige Wanzen Heisenbugs, die offenbar vorübergehend sind. Sie sollten dennoch versuchen, eine Aussage zu treffen wie: "Wenn ich Folgendes tue, tritt in etwa 10 % der Fälle dieses unerwünschte Ergebnis ein."
Sobald Sie das Rezept haben, besteht der nächste Schritt oft darin, es auf einen minimalen Testfall zu reduzieren, wie andere bereits erwähnt haben.
Nicht nur reproduzierbar, sondern auch in einer angemessenen Zeitspanne. Ich musste einmal einen Fehler aufspüren, der in der Regel trat erst nach etwa 45 Minuten nach dem Start eines CPU-intensiven Programms auf. Schließlich habe ich etwas getan (ich erinnere mich nicht), um diese Zeitspanne auf <5 Minuten zu reduzieren, bevor ich die Ursache des Fehlers in den Griff bekam.
Es besteht auch die Möglichkeit, dass der Fehler auf mehr als eine Weise reproduziert werden kann. Ich denke, dies sollte ebenfalls in Betracht gezogen werden.
Ja, wenn es mehr als ein Weg ist, dann haben Sie zwei konzeptionelle Fehlerberichte und zwei Testfälle. Beide sollten auf einen minimalen Testfall heruntergebrochen werden. Sie können einen machen und dann den ganzen Weg gehen, um ihn zu beheben und sehen, ob der andere ein Problem ist, oder Sie können beide zuerst minimieren und dann versuchen zu beheben.
Andere (Xynth, Broam, Moshe) haben die Notwendigkeit erwähnt, einen minimalen Testfall zu erhalten, der hoffentlich in Ihre Unit-Test-Suite eingefügt werden kann. Ich stimme zu. Sobald Sie den Fehler gefunden haben, können Sie zusätzliche Faktoren oder sogar Code (wie von Bob vorgeschlagen) entfernen und bei jedem Schritt testen, ob der Fehler verschwunden ist. Wenn er in Cron ist, führen Sie ihn manuell aus. Wenn er über die GUI ausgeführt wird, versuchen Sie es über eine Kommandozeile oder eine einfache Test-Suite.
Wenn Sie Probleme haben, ist der umgekehrte Ansatz oft nützlich: Erstellen Sie ein kleines, minimales Programm, das ein paar Dinge tut, die die fehlerhafte Routine tut. Testen Sie es und sehen Sie, ob Sie den Fehler haben. Versuchen Sie dann Schritt für Schritt, ein funktionierendes Programm zu schreiben, das das tut, was die fehlerhafte Routine tun soll. Irgendwann sehen Sie vielleicht, dass der Fehler auftritt, dann haben Sie Ihren Testfall. Oder Sie kommen bis zu einer erfolgreichen Routine. In diesem Fall beginnen Sie damit, diese Routine Zeile für Zeile in eine exakte Kopie Ihres Codes umzuwandeln und dabei zu testen, wann der Fehler auftritt.
Spezialisierung auf das Debugging von OpenGL-Fragment-Shadern, die sehr undurchsichtig sind. Dumbing stuff down ist gut und notwendig, aber die Überprüfung der Ausgabe ist schwieriger als normale Anwendungsprogrammierung, so dass Sie einige Tricks benötigen:
Danke für alle Ideen. Sie waren wirklich hilfreich. Soweit ich weiß, gibt es keine bestimmte Liste von Mustern wie die Design Patterns, wenn es um die Behebung von Fehlern geht. Vielleicht hat ab einem gewissen Punkt jeder seinen eigenen Weg.
Wenn der Prozess kompliziert aussieht, versuche ich unter anderem, den Code umzuformulieren. Das gibt mir die Möglichkeit, das Verhalten des Codes zu überdenken, ihn besser zu verstehen und ihn vielleicht sogar wartbarer zu machen. Die Extract-Methode ist mein Favorit, um lesbare logische Einheiten zu erhalten.
Eine meiner Lieblingsbeschäftigungen ist es, wenn sich der Wert einer Eigenschaft auf unerwartete Weise ändert, einen Haltepunkt auf den Setter dieser Eigenschaft zu setzen. Ich weiß nicht, ob es möglich ist, dies mit impliziten Eigenschaftsverlangsamungen zu tun (bool myProperty {get; set;}).
Vielleicht wäre es besser, mit einem BUG-Katalog zu beginnen, in dem alle Arten von Fehlern mit Beschreibungen kategorisiert sind.
danke, burak ozdogan
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
4 Stimmen
Um Ihre Frage zu beantworten: Ja. Es gibt verschiedene Debugging-Strategien, die je nach Art des Problems angewendet werden. Wenn Sie einen Katalog dieser Strategien haben möchten, sollten Sie dies zu einem Community-Wiki machen.
0 Stimmen
Es wird ein Gemeinschafts-Wiki werden, wenn es nötig ist :)
6 Stimmen
Bei fast jeder Frage, die ich in den letzten Wochen eröffnet habe, hat jemand darum gebeten, dass der Beitrag in ein Gemeinschafts-Wiki aufgenommen wird. Ich denke, die Leute sollten sich um ihre eigenen Angelegenheiten kümmern und die Person, die die Frage gestellt hat, respektieren.
2 Stimmen
CW ist eines dieser Konzepte, die ich überhaupt nicht verstehe. Die Verwendung von OpenID ist das zweite.
1 Stimmen
@senfo : Neid auf den Ruf wahrscheinlich :))
0 Stimmen
Das Buch "The Medical Detectives" ist eine sehr gute Lektüre mit Problemlösungsideen, die auf die Softwarewelt übertragen werden könnten.