Doxygen Eigentümlichkeiten / Fragen

Gast #6109275
Hi!

Ich hab jetzt ca. 50 kLOC C-code doxygenifiziert, war nicht sooo 
schlimm.
Es gibt aber paar Eigentümlichkeiten für die ich keine Lösung finde.
Ein Bespiel:
1
if (APP_FI2FOInitialize(pLTT->destInstance - 1, taskBox, appData.myMail, appData.mailCard))
2
  APP_DynamicTasksTaskInstanceAdd(APP_FI2FOTasks, pLTT->destInstance - 1, taskBox, false);

Doxygen erkennt nicht, dass die Funktion APP_FI2FOInitialize (die ein 
bool zurückliefert) aufgerufen wird.
In der Doxy-Doku erscheint die Funktion richtig, aber es gibt angeblich 
keine Caller dafür (Ja, call-tree ist eingschalten, geht ja auch wo 
anders richtig).

Zweites Problem (aber da kann Doxygen wohl nichts dafür) ist, dass nicht 
erkannt wird, dass die Funktion APP_FI2FOTasks verwendet wird. In 
APP_DynamicTasksTaskInstanceAdd wird die Funktion in eine Tabelle 
eingetragen und aus der Tabelle zyklisch aufgerufen.
Wie kann ich Doxygen davon überzeugen, dass die Funktion verwendet wird?

Und last but not least:
In der Initialisierung der Applikation wird ein Haufen von weiteren 
Initialisierungen aufgerufen. Nur die ersten 12 werden angezeigt, der 
Rest (etwa 20) taucht nicht auf. Weder in im caller-Graphen der 
Funktion, noch im call-Graphen.
Im source sehe ich keinen Grund warum Doxygen plötzlich aufhören sollte 
weiterzumachen.

Warnings hab ich etwa 25, die betreffen aber nicht die Teile. Sind von 
Sources aus der Bibliothek und daran ändere ich nichts daran.
C-source ist eingeschalten, mit clang wird es nur schlimmer.
Version ist 1.8.17 unter Windows (mit Doxywizard).

Würd mich über Hinweise freuen.
Moderator Persönliche Seite #6109281
Bezüglich des ersten Problems: irgendein #ifdef ist nicht aus Versehen 
da drumrum geklammert?

Was uns bei #ifdefs immer geholfen hat:
1
#if defined(SOME_FEATURE_MACRO) || defined(DOXYGEN)

Dann im Doxyfile -DDOXYGEN mit angeben.

Bezüglich des zweiten Problems (hört nach N Funktionsaufrufen auf) habe 
ich gar keine Idee.
Gast #6109293
Jörg W. schrieb:
> Bezüglich des ersten Problems: irgendein #ifdef ist nicht aus Versehen
> da drumrum geklammert?

Nein, leider nicht. Ich kann den Punkt wo er aufhört die 
Funktionsaufrufe zu erkennen gut sehen. Kommentare die Doxygen irgendwie 
falsch verstehen könnte hab ich rausgenommen. Ändert nichts.


Jörg W. schrieb:
> Was uns bei #ifdefs immer geholfen hat:
Ja, danke, das mit dem #if defined() ... hab ich gefunden und mach ich 
auch so.

Aber in dem Abschnitt ist echt nichts drinnen das mit #define 
ausgeklammert wird. Das würde ich auch im Editor sehen, der macht den 
Quelltext dann grau.

Doxygen erkennt auch keine Funktionsaufrufe in Parametern von snprintf. 
Find ich sehr seltsam.
Gast #6109461
Michael Gugelhupf schrieb:
> Verschwinden die Probleme irgendwann wenn du den Source-Code
> schrittweise bis auf die Problemstellen kürzt?

***PATSCH***
Da hätte ich ja wirklich selber drauf kommen müssen. 8-/

OK, es ist eine einzige Zeile:
1
  APP_BSPPowerFail = 0;

und das ist definiert als:
1
volatile static int APP_BSPPowerFail = 0;
<Schaem level"max">aber in einem header-file</Schaem>

Hat das Doxygen also auch einen Nebennutzen!

Die restlichen Sachen schau ich mir noch an, die Sucherei hat etwas 
gedauert ...

Ich melde mich wieder und danke ALLEN antwortenden.
Gast #6109508
Aaalso ...

Die call-Graphs und caller-Graphs sind weitaus besser.
Auch die Funktionen die in einem array geladed sind (APP_FI2FOTasks im 
Bespiel) tauchen jetzt im caller-Graph auf!

Was aber immer noch nicht geht sind Funktionsaufrufe im snprintf.
Z.B.
1
  snprintf(buffer, bufferSz, "Temp: %3.1f degC\n", APP_ADCValueGet(ADC3));

Findet Doxygen die nicht, weil es das snprinf nicht weiter analysiert? 
Ich hab stdio.h natürlich nicht in den zu untersuchenden Verzeichnissen 
angegeben.

Aber, ich bin schon mal deutlich zufriedener mit dem Ergebnis.
Gast #6124383
So, ich bin nochmal über etwas "tolles" gestolpert:
1
  if (pL1Node->tag.symbol == APP_SymPut) {

Nach der Zeile hat Doxygen sang und klanglos aufgehört die Funktion 
weiter zu untersuchen.
Wenn ich das durch "if (false) {" ersetzt hab, hat Doxy weitergemacht.
APP_SymPut ist ein enum. Und der enum hatte keinen Kommentar (der wäre 
dann "sinnvollerweise 'Put' gewesen.
Nachdem ich einen Kommentar dahinter geschrieben hab, hat alles 
funktioniert.
Ich find das alles andere als sinnvoll und einleuchtend!

Wie gesagt, kein warning, kein error. Einfach in der Funktion abbrechen.


Das nur so als Hinweis.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.