Ich habe einige Probleme beim Debuggen von etwas sehr merkwürdigem Verhalten. Zum Beispiel haben wir:Debugging von Speicherproblemen ARM7
static const char* LOG_FORMAT = "0x%02x,%.5f,";
und der Zeiger ändert sich ohne ersichtlichen Grund. Manchmal zu Müll, manchmal zu anderen konstanten Strings (oder Teilen davon), die an anderer Stelle im Code definiert sind. Wir sehen auch gelegentlich, dass der Code zu einem anderen Abschnitt springt, der nicht ausgeführt werden sollte (die Statusvariable scheint sich ohne Aufforderung zu ändern). Es gibt 2 oder 3 allgemeine Fehlermodi, und sie scheinen zufällig zu passieren. Es ist eine relativ große Codebasis und das Hinzufügen oder Entfernen einiger Abschnitte ändert das Fehlerverhalten (oder entfernt es vollständig), obwohl auf diese Abschnitte NIE verwiesen wird. Die beste Theorie im Moment ist, dass es sich um ein Gedächtnisproblem handelt, da wir alle neuen Änderungen mit einem feinen Zahnkamm durchgeführt haben und der einfache Vorgang des Einfügens von Codeabschnitten, um Dinge zu verschieben, sich zu ändern scheint oder entfernen Sie das Verhalten.
Was sind die besten Möglichkeiten zum Debuggen dieses Problems oder ähnlicher Probleme? Habe den Debugger manchmal nützlich gefunden, und nicht bei anderen (aber das könnte ein Benutzerfehler sein).
Weitere Hinweise. ARM7, mit Keil μVision 4 und dem Armcc v4.1 Compiler.
Es ist eine Weile her, seit ich mit ARM7 gearbeitet habe, aber ich glaube, es hatte ein paar Hardware Breakpoints zur Verfügung. Setzen Sie einen Wert, um nach einer Schreiboperation auf die Zeigervariable 'LOG_FORMAT' zu sehen, und sehen Sie, was sie verändert. –
sicher klingt wie UB zu mir, aber Sie wussten das wahrscheinlich schon. Selbes merkwürdiges Verhalten auf unterschiedlicher aber identischer Hardware? – yano
Anstatt direkt auf die Zeichenfolge zu verweisen, weisen Sie LOG_FORMAT Speicher zu und kopieren Sie die Zeichenfolge in LOG_FORMAT. – Rajeshkumar