2016-07-19 15 views
0

Ich habe einen C++ - Code, der 288 Iterationen acht Mal ausführt, und es dauert eine Stunde, um einen Satz von 288 Iterationen abzuschließen. Manchmal stürzt das Programm nach den ersten 288 und manchmal nach dem sechsten Lauf von insgesamt 8 Läufen ab.So identifizieren Sie die Codezeile, die während der Laufzeit einen Fehler verursacht

Ich frage mich, ob es eine Möglichkeit gibt, zu wissen, wo dieser Code abstürzt, anstatt dass ich 8 Stunden warte, nur um zu sehen, dass das Programm abstürzt. Ich kann es im Debug-Modus ausführen, aber Debugger zeigt das Programm abstürzt an einem Punkt, wo es nicht abstürzen würde, wenn in der normalen Eingabeaufforderung ausgeführt wird.

Alle Vorschläge wären willkommen. Ich bin es leid, 8 Stunden zu warten, ohne zu wissen, was diese zufälligen Unfälle verursacht. Sollte ich Haltepunkte für Linien verwenden, von denen ich vermute, dass sie diesen Fehler verursachen?

Antwort

0

Ohne zu wissen, welche Programmiersprache und welche Funktionen es schwer ist, detailliertere Informationen zu geben.

1). Bestimmen Sie, was den Absturz verursacht? Wenn es an der gleichen Stelle jedes Mal mit dem gleichen Satz von Eingabedaten abstürzt, ist wahrscheinlich ein Zustand Ihrer Eingabedaten. Sie können aufzeichnen, mit welcher Iteration Sie Variablen verwenden und dann Ihre Daten suchen und diese Iteration zuerst aufrufen, vorausgesetzt, dass jede Iteration unabhängig voneinander ist.

2). Ihr Code stürzt an verschiedenen Stellen mit denselben Daten ab, als wenn er etwas mit der Verarbeitung von Daten zu tun hat. Beispiel: Zeitüberschreitung beim Versuch, Daten von einer anderen Maschine zu lesen, geht Ihnen der Speicher aus?

3). Möglicherweise können Sie Ihrem Prozess einige "Smart" hinzufügen, um nach Zuständen zu suchen, von denen Sie erwarten, dass der Code abstürzt und sie abfängt und meldet.

Informationen, die helfen würden, die Frage zu beantworten. - Welche Programmiersprache/Tools. - Ruft Ihre Berechnung Drittanbieter-APIs oder nur Ihren eigenen Code auf? - Bearbeitet Ihre Berechnung Daten, die von etwas stammen, das Sie lesen müssen, IE) Datenbank, Datei, etc. - Behandeln Sie das Lesen dieser Informationen, damit Sie, wenn es nicht lesen kann, benachrichtigt werden und es stattdessen elegant behandelt einfach krachen?

0

Ihre Frage ist sehr generisch, aber von dem, was ich verstehe und ich habe während 12 Jahren der Programmierung gesehen, würde ich vermuten, dass Sie eine Programmiersprache wie C++ haben. Möglicherweise tritt ein Speicherleck oder ein Pufferüberlauf auf, und der Absturz kann jederzeit und an jedem Ort auftreten, je nachdem, wie viel RAM und/oder Multi-Threading-Timing zur Verfügung steht.

Wenn die C++ - Schätzung richtig ist, schlage ich vor, einen Blick auf Application Verifier zu werfen. Führen Sie Win + R aus und geben Sie appverif ein. Möglicherweise ist es bereits auf Ihrem Computer installiert.

Fügen Sie Ihre Anwendung hinzu und überprüfen Sie alle Artikel in der Basics Gruppe. Speichern Sie die Einstellungen. Führen Sie das Programm dann unter Ihrem Debugger aus. Es wird wahrscheinlich viel früher abstürzen, wenn der Debugger das erste Speicherleck erkennt.

Settings on a sample program

Der Microsoft Debugger hat einen speziellen Befehl !avrf mit Application Verifier zu arbeiten, aber Sie werden auch bessere Ergebnisse in anderen Debugger erhalten.