none
Fehlende Verweise in C++ Include-Diagramm RRS feed

  • Frage

  • Ich habe eine Solution mit mehreren Projekten. Dazu lasse ich mit "Diagramm für Includedatei generieren" einen dgml-Includegraph generieren.

    Innerhalb einzelner Projekte funktioniert dies problemfrei, ich bekomme sogar eine Gruppe mit an die 3k Nodes für die gesamte Standard-Library, Windows-header, Qt und boost - aber die Verbindungen zwischen den Projekten fehlen.

    Also z.B. Projekt A mit A.h und Projekt B mit B.h. In B.h steht '#include "A.h"', die entsprechende Abhängigkeit fehlt im Graphen.

    Ich habe versucht:

    • <> statt ""
    • include-Datei direkt im include-dir oder im subfolder (und dann include "subfolder/A.h")
    • \ statt /

    Wenn ich "A.h" aus dem Projekt A herausnehme ohne sie zu löschen taucht sie prompt unter "Extern" auf (also da wo auch std/boost sind).

    Hatte jemand schon mal ein ähnliches Problem und weiß eine Lösung?

    Das Problem besteht sowohl unter Visual Studio 2015 wie auch 2019 (Enterprise).

    Donnerstag, 27. Februar 2020 02:13

Alle Antworten

  • Hallo AlStahl,

    Hast Du die Compileroption zum Durchsuchen von Informationen ( /FR) aktiviert? Was wird angezeigt, wenn Du das Diagramm nur auf die Abhängigkeiten der aktuell geöffneten Datei beschränkst (indem Du im Kontextmenü Datei an einer beliebigen Stelle in der Datei „Diagramm für Includedatei generieren“ wählst)? Ich verweise Dich auf diesen Artikel:
    Code Maps für C++ Projekte

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 28. Februar 2020 02:03
    Administrator
  • Hallo Dimitar,

    Die Compileroption /FR hatte ich nicht aktiviert, erinnere mich aber an eine entsprechende Abfrage ob ich sie aktivieren will (das hatte ich bejaht, soweit ich mich erinnere). Ich habe sie nachträglich bei allen Projekten aktiviert. Einen Unterschied konnte ich nicht feststellen.

    Wenn ich eine Includemap für eine Datei erzeuge, bekomme ich ein Diagramm mit Gruppen für alle Projekte der Solution und Nodes für alle Files, korrekt einsortiert. Die Include-Beziehungen innerhalb des Projektes der ausgewählten Datei werden korrekt angezeigt. Header anderer Projekte, die included werden, werden als zusätzliche Nodes in "Extern->Andere" angezeigt. Im Tooltip erscheinen die korrekten Werte für "Datei" und "Dateipfad". "Assembly" ist auf das Projekt der zuvor gewählten Datei gesetzt.

    Also im o.g. Beispiel: Eine Include-Map für "B.h" zeigt ein Diagramm mit den Gruppen A (mit A.h), B (mit B.h) und Extern/Andere (mit A.h). Die Node Extern/Andere/A.h hat als "Assembly" B.vcxproj gesetzt.

    Viele Grüße,
    Alex

    Samstag, 29. Februar 2020 02:17
  • Um auszuschließen, dass das Problem mit meiner Ordnerstruktur, CMake, der Anzahl Projekte o.ä. zusammenhängt, hab ich ein Minimalbeispiel erstellt. Es besteht aus einer exe mit 3 files und einer dll mit 2 files. Beide Projekte sind mit den Standard-Vorlagen erstellt, auch wenn ich bei der dll die vorkompilierten Header entfernt habe.

    MWE

    IncludeFileDependencies1.dgml ist das von Visual Studio automatisch erstellte Diagramm.
    IncludeFileDependencies2.dgml ist das korrekte Diagramm (der fehlende Link wurde manuell ergänzt).
    IncludeFileDependencies3.dgml ist das von Visual Studio automatisch erstellte Diagramm für die Datei MWE_exe.cpp.

    Nicht im Bild: /FR ist gesetzt, /showincludes zeigt sämtliche includes korrekt an.


    Samstag, 29. Februar 2020 18:13