Hallo,
ich habe ein recht umfangreiches C-Projekt, dass objektorientiert
angelegt ist (d.h. ich habe einzelne Strukturen, die thematisch sortiert
sind).
Nun wird in diesem Projekt sporadisch eine int-Variable auf "0" gesetzt.
Diese Variable wird mit 5 initialisiert und kann nicht kleiner als 2
sein. Es gibt keine Stelle in meinem Code, wo dieser Variable der Wert 0
zugewiesen wird.
Ich bin schon langsam am verzweifeln!! Ich habe meinem kompletten Code
nach dem Variablennamen durchgeprüft und auch ob irgendwo der Wert 0
zugewiesen wird.
Ich habe meinen Code mit putchar-Meldungen gespickt, aber ich kann
keinerlei Fehler finden!!!
Das Umspringen des Wertes passiert sporadisch und jedesmal zu einem
anderen Zeitpunkt. Ich kann hier keine Systematik erkennen.
Habt ihr ein paar Tipps, wie man aussichtslose Fehler finden kann??
Ich weiß nun wirklich nicht mehr weiter!!
Danke schon mal!
Stefanie schrieb:> ich habe ein recht umfangreiches C-Projekt, dass objektorientiert> angelegt ist (d.h. ich habe einzelne Strukturen, die thematisch sortiert> sind).
?
Gibt viele Möglichkeiten, vagabundierende Pointer,
Out-Of-Bound-Zugriffe, vermurkste unions, ...
Ist das für PC? -->Debugger+Breakpoint!
Stefanie schrieb:> ich habe ein recht umfangreiches C-Projekt, dass objektorientiert> angelegt ist (d.h. ich habe einzelne Strukturen, die thematisch sortiert> sind).
Das hat erstmal nicht so viel mit Objektorientierung zu tun, sondern
einfach mit strukturierter Programmierung.
> Ich bin schon langsam am verzweifeln!! Ich habe meinem kompletten Code> nach dem Variablennamen durchgeprüft und auch ob irgendwo der Wert 0> zugewiesen wird.
Hast du vielleicht irgendwo einen Zeiger auf die Variable?
Es könnte auch sein, daß du mit einem fehlerhaften Index auf ein Array
zugreifst und dadurch in Speicher kommst, der gar nicht mehr zu diesem
Array gehört und an dem dann eben zufällig diese Variable liegt.
> Ich habe meinen Code mit putchar-Meldungen gespickt, aber ich kann> keinerlei Fehler finden!!!>> Das Umspringen des Wertes passiert sporadisch und jedesmal zu einem> anderen Zeitpunkt. Ich kann hier keine Systematik erkennen.>> Habt ihr ein paar Tipps, wie man aussichtslose Fehler finden kann??
Am einfachsten wird es sein, im Debugger einen Watchpoint auf die
Variable zu setzen.
Vielen Dank für eure Tipps!!
Das System ist leider sehr Zeitkritisch, darum kann ich keine
Breakpoints setzen, ohne das mir andere Komponenten aussteigen.
Aber der Tipp mit der vorher definierten Variable sieht mir seehr
vielversprechend aus!! Davor hab ich ein Array definiert. Obwohl dass
müsste es doch mit '\0' überlaufen...
Ich werd's auf jeden Fall testen, wenn ich die Hardware zur Hand habe!
>Ich habe meinen Code mit putchar-Meldungen gespickt, aber ich kann>keinerlei Fehler finden!!!
Fehler Nummer 1: Programm größer machen.
>Das Umspringen des Wertes passiert sporadisch und jedesmal zu einem>anderen Zeitpunkt. Ich kann hier keine Systematik erkennen.
Gründe dafür wurden ja oben schon genannt.
>Habt ihr ein paar Tipps, wie man aussichtslose Fehler finden kann??>Ich weiß nun wirklich nicht mehr weiter!!
Programm schrittweise kleiner machen bis der Fehler weg ist.
Manchmal reicht es schon überlange Strings aus dem Programm zu
entfernen oder zu kürzen.
Du könntest dafür sorgen, dass vor und nach der kritischen int-Variablen
je eine Dummy Variable alloziert wird. Dann kannst du auf diese einen
Write-Haltepunkt setzen, ohne dass bei jedem "guten" Zugriff die
Ausführung unterbricht.