Wir verwenden eine dritte Teilbibliothek, um 3D zu rendern. In dieser Bibliothek gibt es eine "Memory Tracker" -Funktionalität, die den gesamten Speicher verfolgt, den die Bibliothek während der Ausführung zugewiesen und freigegeben hat. Dies ist ein nettes Merkmal, da es hilft, z. Speicherlecks.So fangen Sie die Dateierstellung und den verantwortlichen Aufrufer
Durch Aufruf einer bestimmten Funktion in dieser Bibliothek wird eine Protokolldatei im aktuellen Arbeitsverzeichnis des Prozesses erzeugt. In letzter Zeit ist mir aufgefallen, dass diese Datei an verschiedenen Stellen angezeigt wird. Mein erster Gedanke war natürlich, das aktuelle Arbeitsverzeichnis immer auf den Ordner zu setzen, in dem das Protokoll angezeigt werden soll, und das funktioniert einwandfrei.
Es stellt sich jedoch heraus, dass diese Datei immer noch an verschiedenen Stellen erstellt wird, ohne dass die oben genannte Funktion jemals vom Programm aufgerufen wird. Daher muss die Datei irgendwie ohne meine Zustimmung von der Bibliothek erstellt werden. Der Ersteller dieser Bibliothek sagt, dass die Engine diese Methode niemals intern aufruft.
Also, um ihn falsch zu beweisen (alternativ beweisen, ich bin dumm (wird nicht das erste Mal obwohl)), ich brauche einen Weg, genau zu erfassen, wenn diese Datei erstellt wird. FindFirstChangeNotification() wird nicht tun, da dies mir nur Informationen zur Verfügung stellt, dass etwas in einem Ordner passiert ist. Idealerweise möchte ich (entweder im Prozess oder außerhalb des Prozesses) abfangen, wenn dies geschieht, und irgendwie eine Prozessausnahme einfügen (z. B. make WinDbg fangen), damit ich durch den Callstack die Informationen bekomme, die ich möchte.
Alle Vorschläge sind willkommen.
Prost!
+1 für Codebeispiel. Aber Daniel war zuerst, sorry :) – ralphtheninja