none
Variablenüberwachung eines mehrdimensionalen Arrays? RRS feed

  • Frage

  • Ich verwende in meinem Quellcode ein globales unsigned char Array, welches ich in einer Methode mit Werten fülle. Nun wollte ich an dieser Stelle einen Breakpoint setzen und die Werte überprüfen... doch das Überwachung - Fenster zeigt nur falsche Werte an. Bei normalen (nicht array) Variablen funktioniert diese Überwachung super, aber bei diesen 2 dimensionalen Array nicht. Mach ich irgendwas falsch oder warum ist das so?

    Ein Bild davon kann ich hier leider nicht einfügen, daher mach ichs mal als Quellcode:

    //Array deklarieren und definieren
    unsigned char buffer[30][8]; //im globalen Bereich
    ...
    //innnerhalb einer Methode:
    	buffer[0][0] = 0;
    	buffer[0][1] = 1;
    	buffer[0][2] = 2;
    	buffer[0][3] = 3;
    	buffer[0][4] = 4;
    	buffer[0][5] = 5;
    	buffer[0][6] = 6;
    	buffer[0][7] = 7; //hier Breakpoint gesetzt
    
    /* AUSGABE IM ÜBERWACHUNG FENSTER*/
     buffer[0]  Wert
     - [0]     92 "\"
     - [1]     52 "4"
     - [2]     62 ">"
     - [3]     1 ""
     - [4]     92 "\"
     - [5]     53 "5"
     - [6]     62 ">"
     - [7]     1 ""
    
    
    

    Warum zeigt er mir nicht die richtigen Werte an, gibts da einen Trick? Das komische ist, dass die Werte auf jeden Fall richtig in dem buffer Array stehen, da ich sie mir in einer TextBox ausgeben lasse und dort stehen sie richtig! Nur irgendwie versteht der Debugger das nicht, oder ich habe einen Formatierungsfehler... aber mit "buffer[0],u" oder "buffer[0],c" im Überwachungsfenster habe ich es schon versucht, da kommt auch nix gescheites.

     

    Freitag, 10. Dezember 2010 10:17

Antworten

  • Kein Problem, danke aber für den Versuch :)

    Habe gerade des Rätzels Lösung entdeckt. Man muss die CLR-Unterstützung von /clr:pure auf /clr umstellen! Das geht im VS 2008 Prof. unter Projekt -> Eigenschaften -> Konfigurationseigenschaften -> Allgemein -> Common Language Runtime-Unterstützung. 

    Damit funktioniert es jetzt wie gewollt und der Debugger macht sein Ding. Diese Einstellung ist übrigends für alle interessant, die "alten" unmanaged Code mit "neuen" CLI managed Code mischen wollen! Allerdings steht in der Hilfe vom VS, dass es an anderer Stelle wiederum zu Problemen führt, wenn man diese Einstellung wählt... ich meld mich dann wieder, wenn es soweit ist ;)

    Montag, 13. Dezember 2010 10:55

Alle Antworten

  • Hat keiner eine Idee?

    Habe zusätzlich gerade noch mitbekommen, dass eine Strukur die ich implementiert habe auch völlig falsche Werte im Debugger "Überwachen" Fenster hat! Die Werte sind darin auch manchmal einfach um ein paar Byte verschoben, sodass z.B. das was in Variable A stehen sollte, dann erst in Variable F steht... das versteh ich nicht. Und der Hammer ist wieder, dass wenn ich mir den Inhalt dieser Strukturvariablen in einer TextBox ausgeben lasse, haben sie auf einmal die richtigen Werte! Wenn ich mir zugleich die Werte im Debugger Fenster ansehe, steht dort etwas anderes. Das versteh ich nicht, hat da jemand eine Idee? Es kommen auch keine Fehler oder Warnungen beim Compilieren.

    Montag, 13. Dezember 2010 08:38
  • probier´s doch mal mit diesem ansatz:

                byte[][] scores = new byte[5][];
                for (int x = 0; x < scores.Length; x++)
                {
                    scores[x] = new byte[4];
                }


                for (int i = 0; i < 5; i++)
                {
                    for (int y = 0; y < 4; y++)
                    {
                        scores[i][y] = (byte)((i * 3) + y);
                    }
                }

    grüssle

     

    Montag, 13. Dezember 2010 09:21
  • Danke für die Antwort, aber es funktioneirt nicht. Sieht mir auch nicht nach C++ aus:

    //Dein Vorschlag
    byte[][] scores = new byte[5][]; //ist das C#?
    
    //C++ style wäre: 
    byte scores[][] = new byte[][];
    
    //oder CLI: 
    array<byte> ^scores = gcnew array<scores>()();
    

     

    Habe noch etwas gefunden:

    http://forum.chip.de/c-c/falsche-werte-fuer-struct-uberwachungsfenster-1121870.html

    Bei diesem Thread gehts um genau das selbe Problem, und die zuletzt gepostete "Lösung" funktioniert nicht. Ich möchte ebenfalls, wie im Link beschrieben, auf eine Hardware zugreifen welche per C-API Schittstelle zugänglich ist. Da ich eine grafische Oberfläche mit CLI C++ .NET dazu basteln möchte, muss ich managed und unmanaged Code mischen, was laut Microsoft kein Problem ist... nur der Debugger kommt damit nicht klar, wenn es um Arrays und Strukturen geht.

    Montag, 13. Dezember 2010 10:19
  • bekenne mich der C# programmierung!

    sorry, dann mußt halt noch a weng weitersuchen.

    lg

    Montag, 13. Dezember 2010 10:41
  • Kein Problem, danke aber für den Versuch :)

    Habe gerade des Rätzels Lösung entdeckt. Man muss die CLR-Unterstützung von /clr:pure auf /clr umstellen! Das geht im VS 2008 Prof. unter Projekt -> Eigenschaften -> Konfigurationseigenschaften -> Allgemein -> Common Language Runtime-Unterstützung. 

    Damit funktioniert es jetzt wie gewollt und der Debugger macht sein Ding. Diese Einstellung ist übrigends für alle interessant, die "alten" unmanaged Code mit "neuen" CLI managed Code mischen wollen! Allerdings steht in der Hilfe vom VS, dass es an anderer Stelle wiederum zu Problemen führt, wenn man diese Einstellung wählt... ich meld mich dann wieder, wenn es soweit ist ;)

    Montag, 13. Dezember 2010 10:55