myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Entwicklungs- und Laufzeitumgebung (Infrastruktur) » Debugger lässt Code-Passagen aus [==> durch Release weg optimiert, Debug verwenden]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Debugger lässt Code-Passagen aus [==> durch Release weg optimiert, Debug verwenden]

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Martinar Martinar ist weiblich
myCSharp.de-Mitglied

Dabei seit: 25.08.2010
Beiträge: 55
Herkunft: Berlin


Martinar ist offline

Debugger lässt Code-Passagen aus [==> durch Release weg optimiert, Debug verwenden]

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Community,

im Moment beschäftige ich mit dem Thema "Vererbung von Dictionary".
Ich würde gerne mein eigenes Dictionary entwerfen und mit eigenen Erweiterungen versehen.

Folgende Klasse habe ich entworfen:

C#-Code:
    public class cTest<TKey, TValue> : Dictionary<TKey, TValue>
    {
        public cTest() : base() { }
        public bool RowExist()
        {
            return Convert.ToBoolean(this.Count);
        }
}

Wenn ich nun ein Objekt von dieser Klasse erstelle und die Methode RowExist aufrufe, so wie hier:

C#-Code:
cTest<string, object> d = new cTest<string, object>();
                    if ( d.RowExist())
                    {
                        es = "JA";
                    }
                    else
                    {
                        es="NEIN";
                    }
//springt hier hin

Dann wird zwar die Methode ausgeführt, aber die IF-Condition wird nicht ausgeführt.

Habe nun in der MSDN und stackoverflow geschaut,aber nichts brauchbares gefunden. Ich hoffe, dass das kein Grundlagenfehler ist.
Hat jemand einen Rat, was ich noch genauer untersuchen muss, um den Fehler zu finden.

Grüße
Martinar
Neuer Beitrag 23.07.2012 11:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.653
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Martinar,

am Code ist an sich nichts auszusetzen und das muss schon funktionieren.

Zitat:
aber die IF-Condition wird nicht ausgeführt.

Wie meinst du das? Entweder wird der if- od. der else-Teil ausgeführt.

Zitat:
C#-Code:
return Convert.ToBoolean(this.Count);

Hier könntest du auch

C#-Code:
return this.Count > 0;

schreiben, das finde ich leserlicher.

Klassennamen werden auch nicht mehr mit Präfixen versehen, also keine ungarische Notation. Siehe  Guidelines for Names

Beachte bitte vorsorglich  [Hinweis] Wie poste ich richtig? Punkt 1.1.1.


mfG Gü
Neuer Beitrag 23.07.2012 13:02 Beiträge des Benutzers | zu Buddylist hinzufügen
Martinar Martinar ist weiblich
myCSharp.de-Mitglied

Dabei seit: 25.08.2010
Beiträge: 55
Herkunft: Berlin

Themenstarter Thema begonnen von Martinar

Martinar ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo gfoidl,

also der Debugger springt von

C#-Code:
if ( d.RowExist())

nach

C#-Code:
                    }
//springt hier hin

Danke für die Guidelines, werde Sir mir mal anschauen und entscheiden, ob ich sie übernehmen werde bzw. intertessante Teile davon.

Aber zum Problem, kannst Du das nachvollziehen?
Neuer Beitrag 23.07.2012 13:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.961
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der Debugger kann nicht über das komplette if-Konstrukt springen. Das geht nicht. verwundert

Drückst Du vielleicht "Jump to next break point" (VS C# 2005 Tastaturlayout: F5) statt "Next Step"( F10 ) ?
Breakpoints im if mal gesetzt? Variable nach dem if ausgewertet?
Neuer Beitrag 23.07.2012 13:12 Beiträge des Benutzers | zu Buddylist hinzufügen
winSharp93 winSharp93 ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2918.png


Dabei seit: 19.01.2007
Beiträge: 5.742
Herkunft: Stuttgart


winSharp93 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top



Zitat von gfoidl:
return this.Count > 0;

Streng genommen natürlich this.Count != 0 Augenzwinkern


Cleane mal die Solution und führe einen Rebuild durch. Treten evtl. Compilerfehler auf?
Verwendest du die Variable überhaupt?
Neuer Beitrag 23.07.2012 13:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Sarc
myCSharp.de-Mitglied

Dabei seit: 29.09.2008
Beiträge: 417
Entwicklungsumgebung: VS 2012


Sarc ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Unabhängig von deinem "if"-Problem, wäre es evtl. sinnvoller das ganze mittels Extension-Methods auszulagern, falls du nicht tiefgreifende Änderungen in Dictionary<> vornehmen musst, z. B. so:

C#-Code:
public static class DictionaryExtensions
{
    public static bool RowExist<K,V>(this Dictionary<K,V> d)
    {
        return d.Count > 0;
    }
}

Neuer Beitrag 23.07.2012 13:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Martinar Martinar ist weiblich
myCSharp.de-Mitglied

Dabei seit: 25.08.2010
Beiträge: 55
Herkunft: Berlin

Themenstarter Thema begonnen von Martinar

Martinar ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe mal ein Screenshot erstellt, was beim Debuggen passiert.

Gruß
Martinar

Martinar hat dieses Bild (verkleinerte Version) angehängt:
Bild.png
Volle Bildgröße

Neuer Beitrag 23.07.2012 13:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Martinar Martinar ist weiblich
myCSharp.de-Mitglied

Dabei seit: 25.08.2010
Beiträge: 55
Herkunft: Berlin

Themenstarter Thema begonnen von Martinar

Martinar ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Sarc
Laut dem Forum, sind Extension nur für LINQ da.
Und ich glaube Golo Roden, hatte mal einen Microsoft-Menschen mit dieser Aussage zitiert.


mycsharp.de  Moderationshinweis von herbivore (23.07.2012 15:29):

Mag sein, dass Extension-Methods wegen Linq eingeführt wurde, aber nutzen kann man sie generell. Weitere Infos/Links in gfoidls Beitrag weiter unten.
 
Neuer Beitrag 23.07.2012 13:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.653
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Martinar,

bist du im Release-Modus, da könnte es schon sein, dass das weg-optimiert wird, da die es-Variable ja nicht weiter benötigt wird. Stell auf Debug um, dann gehts.

mfG Gü
Neuer Beitrag 23.07.2012 13:22 Beiträge des Benutzers | zu Buddylist hinzufügen
Martinar Martinar ist weiblich
myCSharp.de-Mitglied

Dabei seit: 25.08.2010
Beiträge: 55
Herkunft: Berlin

Themenstarter Thema begonnen von Martinar

Martinar ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@gfoidl
Wow das war es!!! Aber wie kann das sein? Wird dann im Release-Modus die Variable "es" nicht gefüllt. Den Unterschied von Debug und Relase kann ich doch bestimmt in der MSDN finden oder?

Welche Einstellungen ist besser, wenn man neue Dinge entwickeln will?
Neuer Beitrag 23.07.2012 13:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.961
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Entwicklung natürlich Debug. Deswegen heißts Debug. Im Release-Modus werden Code-Stellen optimiert, sodass Variablen, die niemals benötigt werden, im späteren IL-Code nicht mehr auftauchen. Auch werden Code-Strukturen u.U. optimiert. Entfallen von leeren Scopes etc.

Da die Debug-Metadaten aber solche Dinge beinhalten, sollte beim Debug ein "Wegoptimieren" auch nicht stattfinden. Kann man in den Projekteinstellungen definieren.
Neuer Beitrag 23.07.2012 13:31 Beiträge des Benutzers | zu Buddylist hinzufügen
Martinar Martinar ist weiblich
myCSharp.de-Mitglied

Dabei seit: 25.08.2010
Beiträge: 55
Herkunft: Berlin

Themenstarter Thema begonnen von Martinar

Martinar ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Abt
Vielen Dank, hatte bis jetzt immer im Release-Modus programmiert.
Gibt es Guidlines, wie man sein IDE einstellen muss, damit das "Wegoptimieren" nicht stattfindet und die höchste Dichte an Informationen hat.

Habe gerade den Punkt weiter getestet und so springt er unter "Release" in die Unterpunkte:

C#-Code:
                string es;
                string tr;
                es = string.Empty;
                try
                {
                    bool b;
                    bool t;

                    if ( d.RowExist())
                    {
                        es = "JA";
                    }
                    else
                    {
                        es="NEIN";
                    }
                }
                catch(Exception ex)
                {

                }
                tr = es;

Ich möchte alllen Community-Mitgliedern danken, die mir geholfen haben.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Martinar am 23.07.2012 13:38.

Neuer Beitrag 23.07.2012 13:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.653
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Martinar,

nimm einfach DEBUG und gut ist es.



Zitat:
Laut dem Forum, sind Extension nur für LINQ da

Nicht nur. Siehe  Wo genau Extension Methods einsetzen, wo besser eigene Klassen? und  [Einführung] Extension Methods in C# 3.0. Bitte hier keine weitere Diskussion zu Erweiterungsmethoden, sondern ggf. in den anderen Threads. Bitte beachte  [Hinweis] Wie poste ich richtig? Punkt 1.2.


mfG Gü
Neuer Beitrag 23.07.2012 13:36 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.961
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Es heißt Release - weil das eben in der Regel für die Veröffentlichung gedacht ist. Die Einstellungen an für sich sind vom Standard okay. Aber wir können Dir hier keine Anleitung für das Einstellen von Visual Studio schreiben. Das ist auch nicht unsere Aufgabe ;)

Das Ding ist soo umfangreich und jeder hat seine eigenen Einstellungen der kompletten IDE - die Projektkonfiguration DEBUG und RELEASE sollte man aber an für sich so lassen.

Beschäftige Dich einfach mit der IDE selbstständig und Du wirst sie mit der Zeit kennen lernen.
Neuer Beitrag 23.07.2012 13:39 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 7 Jahre.
Der letzte Beitrag ist älter als 7 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 11.07.2020 16:56