Forum: Compiler & IDEs Systematische Fehlersuche bei Include-Problemen


von Daniel W. (d_w)


Lesenswert?

Hallo liebe µC-Community!

Seit einiger Zeit sind bei uns an der TH Bausätze des Nibo 2 Roboters 
vorhanden und werden zum Lernen für C für eingebettete Systeme 
eingesetzt. Allerdings ist das Gebiet teilweise etwas Neuland.

Zum Problem: Ich habe Hiwi-mäßig den Kurs mit vorbereitet und unter 
anderem auch geschaut, mit welchen Tools plattformübergreifend C für 
AVR-Targets programmiert werden kann. Die Wahl fiel auf Eclipse CDT mit 
AVR-Plugin. Unter Windows kommt die neuste Version von WinAvr zum 
Einsatz, die Apple Menschen verwenden wohl Crosspack.

Nun ist es so, dass in unterschiedlichen Programmen (auch aus den 
Tutorials des Herstellers des Nibo 2) auf unterschiedlichen Systemen 
unterschiedliche Funktionen und Variablen nicht korrekt aufgelöst 
werden. Das typische "xy could not be resolved" halt. Ihr habt 
sicherlich schon bemerkt, dass da jede Menge unterschiedlich drin war.
Es verhält sich tatsächlich so, dass auf all unseren Laborrechnern in 
einem bestimmten Programm zwei extern eingebundene Variablen nicht 
aufgelöst werden. Alle anderen Funktionen, die über den gleichen Include 
kommen, werden aber ohne Probleme eingebunden. Die Versionen der 
verwendeten Bibliotheken, WinAvr, Plugin, Eclipse und eben auch der 
Programmcode sind jedoch die gleichen, wie auf meinem Rechner, bzw. wie 
auf den privaten Rechnern der werten Mitstudenten, wo diese speziellen 
Fehler nicht auftreten. Dafür treten vergleichbare Fehler sporadisch auf 
verschiedenen Rechnern der Kommilitonen auf.

Im Prinzip handelt es sich immer um Probleme bei auflösen von 
eigebundenen Variablen und Funktionen. Wobei die zu Grunde liegenden 
Bibliotheken bei allen in der gleichen Version vorliegen, keine Includes 
im Code selbst fehlen und unter exakt gleichen Bedingungen die Fehler 
auf anderen Rechner nicht auftreten.

Daher geht meine Frage an euch raus:
Wie geht man systematisch vor, um dem Problem auf die Spur zu kommen?

Vielen Dank für eure Antworten, ich hoffe ich hab' mich verständlich 
machen können ;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Daniel W. schrieb:
> Das typische "xy could not be resolved" halt.

Genaue Fehlermeldung posten, denn ob es sich um eine Linker- oder 
Compilermeldung handelt, kann man nur daran erkennen. Und wenn es eine 
Linkermeldung ist, ist es kein Problem mit irgendwelchen 
Include-Dateien.

von Krapao (Gast)


Lesenswert?

> Daher geht meine Frage an euch raus:
> Wie geht man systematisch vor, um dem Problem auf die Spur zu kommen?

Zusätzlich zum Vorgehen nach Rufus kann man in hartnäckigen Fällen Tools 
einsetzen, die zeigen, auf welche Dateien die Toolchain zugreifen will. 
Ein solches Tool ist Filemon (alter Name) bzw. dessen Nachfolger 
Process Monitor 
(http://technet.microsoft.com/de-de/sysinternals/bb896645)

von Krapao (Gast)


Lesenswert?

> Dafür treten vergleichbare Fehler sporadisch auf
> verschiedenen Rechnern der Kommilitonen auf.

Vermutlich hast du keine Chance die Tools oben auf Fremdrechnern 
einzusetzen.

Als Alternative könnte man eine standardisierte Entwicklungsumgebung in 
eine virtuelle Umgebung oder auf eine LiveCD (oder LiveStick) packen, 
die von den Studenten verwendet wird.

von Daniel W. (d_w)


Lesenswert?

Hi, danke für die Antworten.

@Rufus: Fehler kommt nachher, komm grad an die entsprechenden Rechner 
nicht ran.

@Krapao: Process Monitor ist 'ne gute Idee, wird aber auf den 
Laborrechner nur für die Admins laufen. Aber für die privaten Rechner 
auf jeden Fall 'ne Möglichkeit. Ne fertige VM mit Ubuntu und allen Tools 
gibt's sogar schon. Wenn sich die Fehler am Ende nicht finden lassen, 
würde ich den Einsatz dann empfehlen. Allerdings wär mir 'ne 
Fehlerbehebung lieber, als ein Workaround.

von Daniel W. (d_w)


Lesenswert?

So, ich konnte mittlerweile an die fraglichen Laborrechner. Die gute 
Nachricht ist, dass weder Compiler noch Linker tatsächlich Probleme 
machen. Dafür findet die Syntaxprüfung von Eclipse die Variablen nicht. 
Weiß jemand, wie man dem beikommen kann? Ist schon irritierend, wenn man 
Fehler gezeigt bekommt, die keine sind.

PS: Der Kurs findet heute noch statt. Da werde ich nachher nochmal 
vorbeischauen, um nochmal einen Blick auf die privaten Rechner der Leute 
zuwerfen, die Probleme hatten.

von Oliver (Gast)


Lesenswert?

Daniel W. schrieb:
> Dafür findet die Syntaxprüfung von Eclipse die Variablen nicht.

Altbekannter Effekt, leider ohne wirkliche Lösungsmöglichkeiten. Auf 
machen Windows XP (z.B. bei meiner, mit Eclipse Helios) verschwindet das 
Problem nach dem ersten build. Manchmal hilft auch eine neuerliches 
Indexieren des Projektes.

Oliver

von Klaus F. (kfalser)


Lesenswert?

Daniel W. schrieb:
> Weiß jemand, wie man dem beikommen kann?

Für normale C/C++ Projekte muss man unter den Projekt-Eigenschaften 
unter C/C++ General, unter "Path und Symbols" die Pfade zu den includes 
eintragen.
Aber bei WinAVR ist das vielleicht anders.
Du solltest im Projekt Explorer im Projekt aber ein Verzeichnis 
"Includes" sehen, darunter die für den Indexer sichtbaren Includes.

von Oliver (Gast)


Lesenswert?

Klaus Falser schrieb:
> Du solltest im Projekt Explorer im Projekt aber ein Verzeichnis
> "Includes" sehen, darunter die für den Indexer sichtbaren Includes.

Das (altbekannte) Problem ist, daß die Pfade da sind, der Indexer aber 
trotzdem meckert. Irgendwo in den Tiefen der Beiträge zum avr-plugin 
steht auch, was da in Eclispe schief geht, aber eine allgemeingültige 
Lösung gibt da für m.W. nicht.

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.