Fiese kleine Pointer

jccTeq

Erfahrenes Mitglied
Hey Leute,

nochmals Konzeptfrage... wie sollte man am besten vorgehen um möglichst effektiv Abstürze in eigener Software (sehr umfangreiche Projekte mit hunderten von Zeigern) aufgrund von ungültigen Zeigern zu finden? Geht um selbstentwickelte Windows-Software.

Wie macht ihr das?

Gruß,
Hendrik
 
Na am besten benutzt du SmartPointers !
Werde hier jetzt nicht erklären wie das funkioniert, ist nämlich ein bissel
aufwendig (Templates,..). :-)
Aber im Net gibt es genügend Infos drüber.
Oder lies das Buch "Mehr Effektiv C++" von Erik Meyer.

Gruß, Christian
 
Zuletzt bearbeitet:
Unter Linux benutze ich Valgrind als Sucher und Indizierer für Memory-Leaks.
Für den GNU C++ Compiler unter Windows z.B. mit Bloodsheds DevCpp sollte das auch funktionieren.
 
Problem ist, die Software, die von diesen Abstürze gequält wird (abgesehen mal vom Betriebssystem meines Hirns) ist mit MS Visual C++ enwickelt und übersetzt. Gibt es da irgendeine Möglichkeit Zugriffsverletzungen auf Zeiger zu finden und die betroffenen Zeiger eventuell sogar namentlich auszugeben? Mit Debug-Informationen müsste das doch möglich sein, oder?!

edit: es wird viel mit
Code:
delete this;
gearbeitet. Ist das okay so? Ich für meinen Teil finde diese Art des Codings nicht so toll. Weil in den meisten Fällen ist es so ein delete this, was abstürzt. Jedenfalls nach Angabe des Debuggers. Eigenartig ist, daß das Objekt ja noch existiert und das delete this trotzdem mit 'ner Access-Violation abstürzt.

Ich würde das ganze Programm ja gern in .NET (Managed Code, Garbage Collector) nochmal schreiben. Aber der Aufwand ist dermaßen groß, daß sich das nicht lohnt. Wäre es nicht möglich, erstmal nur Teile des Programms in .NET zu übertragen?
 
Zuletzt bearbeitet:
Wenn delete this; abschmiert:
hast du das Objekt überhaupt mit new angefordert?
Zu beachten ist auch: Über new[] angeforderte Objekte müssen mit delete[] gelöscht werden, keine Vermischungen.

Oder vielleicht arbeitest du in einer Klassenhierarchie ohne virtuellen Destruktor oder sowas, keine Ahnung, was da passieren kann (btw, das probier ich doch nachher glatt mal aus :) )

Mfg
 
Gegenfrage: kann delete this; auf Objekten angewandt werden, die nicht per new kreiert, sondern direkt instanziiert wurden?

Also nicht
Code:
CBlubb* pBla = new CBlubb();

sondern
Code:
CBlubb cBla;


Funktioniert in einem so erstellten Objekt überhaupt ein delete this;?


btw: Toll... ich würde mir ja eine Trial von Rational Purify saugen, wenn der Server nicht so lahm wäre und dauernd die Verbindung kappen täte... *kotz* :mad:
 
*schlurp* *hochhol*

So weiter gehts... gibt es noch weitere Alternativen zu valgrind zum Debuggen von Linux-Programmen? Wir haben hier nämlich einen Speicherfressen, den es zu finden gilt und valgrind sorgt leider dafür, daß die Software, in der das auftritt aufgrund ihres Umfangs viel zu langsam läuft, um damit vernünftig arbeiten zu können. Unser System ist Timing-Abhängig und eine mit Valgrind gedebuggte Software läuft bei uns viel zu langsam, um dieses Timing einzuhalten. Logisch irgendwie, aber gibt es Alternativen, wie man Speicherfresser finden kann, ohne die zu debuggende Software derart zu beeinträchtigen?

Danke!

Gruß, Hendrik
 
Zurück