Laden...

Objekte identifizieren während dem Debuggen?

Erstellt von zipperle vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.253 Views
Z
zipperle Themenstarter:in
47 Beiträge seit 2006
vor 15 Jahren
Objekte identifizieren während dem Debuggen?

Hallo,

habe jetz schon ne weile im Netz und verschiedenen Foren recherchiert. Zunächst zu meiner Frage. Ich möchte während dem Debuggen mit Visual Studio 2005 (meine Projekte werden jedoch mit .Net 1.1 übersetzt) im Debugger sehen mit welchem Objekt ich es konkret zu tun habe. Sprich ich möchte zwei Instanzen einer Klasse im Debugger identfizieren können. Allerdings möchte ich hierfür keine Klassenvariablen als ID, oder GetHashCode oder ähnliches einsetzen.

Ich hab im Netz Beschreibungen gesehen dass dies mit VS2005 unc C# Projekten geht in dem man Rechtsklick auf die Variable im Überwachungsfenster macht und auf Objekt-Id erstellen klickt. Dies funktioniert aber anscheinend erst ab .Net2.0. Ich übersetze meine C#-Projekte aber mit .net 1.1 und dort funktioniert dies nicht.

Gibt es vielleicht ein Plugin für VS das dem Debugger diese Information hinzufügt? Oder habt ihr noch andere Vorschläge?

Danke!

D
201 Beiträge seit 2007
vor 15 Jahren

Hallo,

ich habe zwar leider auch keine Antwort auf deine Frage (ich kenne auch nur den Weg mit der Objekt-ID), aber warum möchtest du denn nicht den HashCode benutzen? der ist doch eindeutig, oder?

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo D.Follmann,

der Hashcode eignet sich aus zwei Gründen nicht.

Er ist war so gestaltet, dass er für zwei verschiede Objekte möglichst einen unterschiedlichen Wert liefert, aber sicher ist das nicht und möglich ist es meistens auch nicht, weil es meistens mehr unterschiedliche Objekte als verschiedene Hashcodes geben kann. Es gibt nur ca. 4 Milliarden verschiedene Hashcodes.

Außerdem liefern gleiche Objekte gleiche Hashcodes, auch wenn sie nicht identisch sind (oder sollten das zumindest tun). Der Hashcode bezieht sich also auf die durch Equals definierte Gleichheit und nicht auf die Identität der Objekte (nur dann, wenn Equals nur identische Objekte als gleich betrachtet, was zugegeben für die meisten Referenztypen der Fall ist).

herbivore

Z
zipperle Themenstarter:in
47 Beiträge seit 2006
vor 15 Jahren

danke an herbivore für die erklärung. da du keine sonstigen alternativen erwähnt hast, gehe ich mal davon aus, dass du auch keine kennst!?

3.971 Beiträge seit 2006
vor 15 Jahren

RuntimeHelpers..::.GetHashCode-Methode (Object) gibt dir eine eindeutige ID für ein Objekt zurück. Die ID ist eine Art Auto_Increment, die automatisch beim Erstellen einer neuen Instanz (egal welchen Klassentyps) hochgezählt wird.

Die Standard-Implementierung von Object.GetHashCode() gibt beispielsweise diesen Wert zurück.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

Z
zipperle Themenstarter:in
47 Beiträge seit 2006
vor 15 Jahren

@kleines_eichhoernchen: bezieht sich der Auto_Increment auf alle innerhalb meiner Anwendung (also meines Prozesses) erzeugten Objekte oder gilt dieser für alle Objekte aller Prozesse die auf dem Betriebssystem Instanziiert sind?
Ich vermute Prozessbezogen, weil ich in meiner Anwendung z.B. Objekte untersucht habe die die Id 9975 haben, heisst das also dass dieses Objekt dann das 9975ste erzeugte Objekt meiner Anwendung ist? Das bedeutet doch dann widerum, dass ich noch bis zu der von herbivore angesprochen 4 Mrd Grenze noch gut luft habe.

Die Id bleibt auch garanetiert für die lebensdauer dieses Objektes oder kann diese durch irgendwelche Umstände im Laufe des Programms sich ändern?

Für diese Id könnte man sich doch ein Plugin für VS bauen, dass diese Id eines Objekts immer in einer Spalte des Überwachen-Fensters darstellt!?

3.971 Beiträge seit 2006
vor 15 Jahren

Diese IDs sind auf die jweilige AppDomain bezogen.

Ob du jetzt 2Mrd oder 4Mrd Objekte damit identifizieren kannst, müsstest du mal ausprobieren und vor allem was kommt danach.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...