Benutzer mit den meisten Antworten
Variablenüberwachung eines mehrdimensionalen Arrays?

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.
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 ;)
- Als Antwort markiert Seppel der Programmierer Montag, 13. Dezember 2010 10:56
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.
-
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
-
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.
-
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 ;)
- Als Antwort markiert Seppel der Programmierer Montag, 13. Dezember 2010 10:56