Doxygen Eigentümlichkeiten / Fragen

Gast #6109275
Lesenswert?

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

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

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