Tipps zum Fehler finden

Gast #2195118
Lesenswert?

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!
Gast #2195155
Lesenswert?

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!
Gast #2195156
Lesenswert?

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.
Gast #2195328
Lesenswert?

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!
Gast #2195402
Lesenswert?

Du kannst ja schon mal schauen ob du irgendwo auf die Arraygrenze 
zugreifst.

Direkt:
1
array[ARRAYGRENZE] = 0;
Nach einer Schleife :
1
for (i=0;i<ARRAYGRENZE;i++)
2
{ ..}
3
array[i] = 0;
Oder bei einem Funktionsaufruf
1
tuwas(array,ARRAYGRENZE); // statt tuwas(array,ARRAYGRENZE-1);
Gast #2195459
Lesenswert?

>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.
Gast #2196592
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren