Frage

Ich versuche, Bounds zu verwenden, um ein ziemlich komplexes Programm zu analysieren. das Programm mit Bounds Laufen ist fast zu langsam für sie von Nutzen zu sein, da es mir fast einen Tag nimmt das Programm an die Stelle im Code, wo ich vermute, dass das Problem existiert zu laufen. Kann mir jemand ein paar Ideen für geben, wie nur bestimmte Teile meiner Software zu inspizieren mit Bounds (DevPartner) in Visual Studio 2005?

Vielen Dank im Voraus für Ihre Hilfe!

War es hilfreich?

Lösung

Ich habe Bounds letzte vor ein paar Jahren, und hatte die gleichen Probleme. Bei großen Projekten, macht es alles so langsam laufen, dass es sinnlos ist. Am Ende haben wir es Notwasserung.

Aber wir brauchten noch etwas davon Funktionalität ist, aber wie Sie, nicht für das gesamte Programm. So hatten wir es selbst zu tun.

In unserem Fall haben wir es hauptsächlich Lecks Speicher, um zu versuchen und die Spur zu kommen. Wenn das Ihr Ziel ist auch, gibt es andere Möglichkeiten.

  1. Visual Studio hat einen ziemlich guten Job Sie Speicherlecks zu sagen, wenn Ihr Programm beendet
  2. Sie berichtet Lecks in der Reihenfolge, in der sie erstellt wurden
  3. Es wird Ihnen genau sagen, wo der ausgetretene Speicher erstellt wurde, wenn die Quelldateien diese haben an der Spitze

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

Die helfen, eine Menge, aber es ist oft nicht genug. dass Schnipsel überall Hinzufügen ist nicht immer möglich. Wenn Sie Factory-Klassen, zu wissen, wo Speicher zugewiesen wurde gar nicht helfen. Also, wenn alle Stricke reißen, nutzen wir # 2.

Fügen Sie etwas wie folgt aus:

#define LEAK(str) {char *s = (char*)malloc(100); strcpy(s, str);}

Dann Pfeffer Code mit "LEAK (" leak1 ");" oder Wasauchimmer. Führen Sie das Programm, und beenden Sie es. Ihre neue durchgesickert Strings werden in Visual Studio Leck Dump rund um die bestehenden Lecks anzuzeigen. Halten Sie das Hinzufügen / Bewegen der LEAK-Anweisungen und wieder läuft das Programm zu suchen, bis Sie die genaue Position geortet haben. Dann das Leck beheben, entfernen Sie die Debugging-Lecks, und Sie sind alle gesetzt!

Andere Tipps

Bounds verfolgt alle Speicherzuordnungen und Releases in extremem Detail. Er weiß zum Beispiel, dass so und so eine Speicherzuordnung von dem C-Laufzeit-Heap getan wurde, die wiederum von einem Win32-Haufen genommen wurde, was wiederum das Leben als Speicher von VirtualAlloc zugeordnet gestartet. Wenn die Anwendung instrumentiert wurde (FinalCheck), hat es auch detaillierte Informationen, welche Zeiger den Speicher verweisen.

Dies ist ein Grund (von vielen), warum die Sache langsam ist.

Wenn BC spät zu einer Anwendung verbinden, wäre es keine dieser Daten aufgebaut, und müßte entweder (1) gräbt alles auf einmal, oder (2) beginnen, über Dinge zu erraten. Weder Lösung ist sehr praktisch.

Eine Möglichkeit Bounds aufzuhellen ist durch von der Instrumentierung mit Ausnahme aller, aber die wenigen Module, die Sie interessieren. Ich weiß, das ist, weil nicht toll, wenn man wusste, wo das Leck war würden Sie Bounds nicht brauchen. Was ich in der Regel empfehlen, dass Sie Active Check-Modus BC verwenden zunächst nur mit Speicherverfolgung zur Verfügung. Sie vermissen die API-Validierungen, aber man konnte immer, dass separat erneut ausführen. Nachdem Sie Active überprüfen laufen und Sie erhalten Hinweise in Bezug auf die Module sind in der Regel problematisch, nur dann kann man das Instrumentierung für das Modul oder Module von Interesse und die Abhängigkeiten. Wir wissen, Endkontrolle annoyingly langsam ist, aber als Mistiano richtig erklärt, mit Endkontrolle nicht nur BC eine grafische Darstellung aller zugewiesenen Blöcke halten, sondern auch alle Zeiger und Kontexte zu ihnen. Darin liegt die Magie in wie Endkontrolle Lecks und Verfälschungen an der Stelle des Auftretens nageln kann, nicht nur auf das Beenden der Anwendung oder Fehler. Shameless Stecker: Ich auf dem DevPartner Team arbeiten. Wir veröffentlichen DPS 10.5 am 4. Februar 2011 mit einem x64 Anwendungsunterstützung in BC. Im Gegensatz zu dem relativ alt und unterbieten BC64 für Itanium, die nur Aktiv-Überprüfung zur Verfügung gestellt, DPS 10.5 bietet eine vollständige Endkontrolle Unterstützung für x64-Anwendungen, sowohl für rein C ++ und für native Module in .NET-Prozessen ausgeführt. Siehe microfocus.com unter MF Developer für Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top