Rausfinden ob Debug oder Release Assembly

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Markus Jacobs.

    Rausfinden ob Debug oder Release Assembly

    Hallo zusammen,

    ich wollte fragen ob euch ein Weg bekannt ist, rauszufinden ob die eigene Assembly eine Debug Version oder eine Release Version ist.
    Warum brauch ich das ganze?
    Ich bin momentan einen Klassenchat für ein Lokales Netzwerk (natürlich TCP) am programmieren und da ich regelmäßige Updates einbaue der alte Client nicht mehr zu verwenden ist.
    Nun all das hab ich auch schon geschafft, ich hab ne Server.exe die beim Start die vom der Datei Client.exe im selben Ordner liegend nen MD5 Hash erstellt und diesen in einer Variable stored.
    Sobald dann ein anderer Client versucht zu verbinden sendet er den MD5 Hash seiner Version und der Server vergleicht das ganze. Funzt alles wunderbar, nur möchte ich, weils beim recompilen in visual studio manchmal eben unterschiedliche Hashes sind diese Funktion nur ausführen lassen wenns die Release Version beider Anwendungen ist.
    Dazu hab ich mir ne Variable angelegt isDebug und diese globalisiert. Jetzt kann ich einfach if isDebug = False Then ' Dann release sachen ausführen. blabla

    Da ich aber zu faul bin immer von true nach false zu stellen wenn ich dann die neue version rausbringe möchte ich das ganze automatisieren..
    Gibt es eine Funktion womit ich ganz einfach abfragen kann ob die eigene Anwendung gerade eine Debug Version oder eine Release version ist..


    Hoffe ihr wisst was ich meine.
    Vielen Dank im Voraus :)
    Jupp Danke, hätte sich dann wohl erledigt. :thumbsup:

    Edit: Hatte nach falschen Stichworten gesucht, ich hab noch was einfacheres gefunden.
    Wer´s braucht hier:

    VB.NET-Quellcode

    1. If Debugger.IsAttached Then
    2. MsgBox("Debug Mode")
    3. Else
    4. MsgBox("Release Mode")
    5. End If


    Ist zwar ein Trick aber dasselbe Ergebnis.
    Zu beachten ist allerdings das wirklich nur überprüft wird ob ein Debugger debuggt, also nich ob es ein Debug Build ist.
    Das ist ein Unterschied!

    Vielen dank trotzdem :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Markus Jacobs“ ()

    Wenn ich noch was ergänzen darf:

    Man kann generell zwei verschiedene Zustände bzgl. Debugging unterscheiden:

    a) Das Programm wird im "Release"-Mode übersetzt.
    b) Das Programm wird gerade gedebuggt.

    Warum ist das wichtig? Auch wenn ein Programm im Release-Mode übersetzt wird, kann es im Debugmodus ausgeführt werden. Ausprobieren: Konfiguration auf Release stellen und dann das Programm schrittweise ausführen (F8 bzw F11 - je nach Tastenkonfiguration) oder Haltepunkte setzen.

    Woran erkennt man, dass ein Programm als "Release" übersetzt wurde?
    1. Wie im verlinkten Artikel beschrieben ist die Precompiler-Konstante #DEBUG definiert. Das ist die sauberste Möglichkeit.
    2. Das globale Debug-Objekt (aus System.Diagnostics) ist nicht definiert, d.h. alle Debug.Print oder Debug.Assert-Anweisungen werden nicht kompiliert. Man könnte also mit Debug.Print den Rückgabewert einer Funktion ausgeben lassen, die nur an dieser Stelle aufgerufen wird und nur dazu dient, eine Variable zu setzen, an der man erkennen kann, ob das Debug-Objekt existiert oder nicht. Aber wie gesagt: 1. ist eleganter.

    Woran erkennt man, dass ein Programm gerade gedebuggt wird (unabhängig davon ob als Debug oder als Release kompiliert)?
    System.Diagnostics.Debugger.IsAttached gibt dann True. Ansonsten False. Der Unterschied zum System.Diagnostics.Debug-Objekt: System.Diagnostics.Debugger steht auch im Release-Mode zur Verfügung.

    Je nach Anwendungsfall kann also das eine oder das andere (oder gar eine Kombination aus beidem) sinnvoller sein.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.