Warum wird dieser Code nicht korrekt ausgeführt (Video)?

8

Ich verwende Unity (3.4) Monodevelop (2.4.2) und es führt den Code nicht richtig aus, wenn ich ihn im Debugger durchtrete. Hier ist ein Link zu dem Video, das es zeigt, bitte starte es bei 720p und fullscreen es ...

Ссылка

Hier sind einige Screenshots, die zeigen, wie der Debugger wirklich seltsame Werte anzeigt, wenn ich mit der Maus über eine Variable gehe. So sieht es aus, wenn es den Wert des xSectionPixels im ersten if-Block korrekt anzeigt ... Und so sieht es aus, wenn es den Wert von xSectionPixel im zweiten if-Block falsch anzeigt ...
Dies ist auch die Codezeile, in der Code falsch ausgeführt wird.

Was würde das verursachen?

Ich habe versucht, die Tools neu zu installieren und eine neue Kopie des Codes aus dem Repository zu verwenden. Ich habe sogar alles auf einem anderen Computer mit einem anderen Betriebssystem (Win 7) eingerichtet und es macht immer dasselbe. Bedeutet das nicht, dass es dann mein Code sein muss?

Es ist auch erwähnenswert, dass ich SVN verwende, um den Code aus einem Repository zu pushen / ziehen, und meine lokale Kopie existiert in meinem Dropbox-Ordner.

Vielen Dank im Voraus für Ihre Weisheit! Ist hier auch der Code, wenn Sie etwas finden können, das Dinge brechen könnte (d. H. Die Art, wie ich Floats und Ints vielleicht verwende?)

%Vor%     
BeachRunnerFred 03.12.2011, 04:28
quelle

6 Antworten

7

Ich habe keine spezifische Erfahrung mit den Frameworks, die Sie verwenden, aber ich habe viel Erfahrung mit Debuggern. Das Debugger-Verhalten, das Sie sehen, kann in einem von zwei Szenarien passieren (was ich mir vorstellen kann ...)

  1. Die Symboldateien und der ausführende Code sind nicht mit Ihrem Quellcode synchronisiert, normalerweise sollte die IDE dies erkennen, aber in einigen Fällen ist es nicht die Lösung, alle Binärdateien zu löschen, neu zu kompilieren und es erneut zu versuchen / p>

  2. Ein Fehler im Debugger oder in der Debugger-Erweiterung (wird zum Debuggen in der spezifischen Umgebung verwendet, in der Sie sich befinden, d. h. Einheit / monodevelop).

Wenn Sie es nicht lösen können, würde ich Ihrem Code Protokollierung hinzufügen und sie verwenden, um wirklich zu verstehen, was passiert.

    
Asher 03.12.2011 04:46
quelle
2

Ich sah ähnliches Verhalten auf MonoDevelop mit WinForms-Anwendungen, gelöst mit Neuinstallation Debugger.

Haben Sie das versucht oder mithilfe von Visual Studio überprüft, ob das Problem im Code enthalten ist?

    
Anton 05.12.2011 08:05
quelle
2

Haben Sie Optimierungen aktiviert? Wenn ja, macht das Deaktivieren sie weniger unberechenbar?

Das Aktivieren von Optimierungen ist eine Sache, die ich mir vorstellen kann, die bisher noch niemand erwähnt hat, die möglicherweise verursachen könnte, was Sie sehen.

    
jstedfast 06.12.2011 16:30
quelle
1

Können Sie versuchen, Ihre Haltepunkte zu entfernen, einen neuen festzulegen und den Code durchzugehen?

Der Grund, warum ich frage, ist, dass es Möglichkeiten gibt, wie Sie Werte mithilfe von Haltepunkten setzen können. Eine sehr ähnliche Sache passierte mir und war überzeugt, dass es einen Compiler Bug gab. Nachdem wir durch die CLR und die Anzahl anderer Dinge ohne Antwort gegangen waren, stolperten wir über einen Breakpoint, der früher zum Testen gesetzt und nie entfernt wurde.

    
Joe 11.12.2011 21:44
quelle
0

Diese Art von Verhalten passiert mir normalerweise, wenn ich einen Multithread-Teil einer Anwendung debugge.

Was passiert, wenn Sie mehrere Threads gleichzeitig debuggen, wechselt der Debugger im Visual Studio ständig zwischen Ihnen hin und her, ohne Sie zu benachrichtigen Jetzt, da Threads nicht die gleichen Zeilen zur gleichen Zeit ausführen, haben Sie unerwartete "Sprünge".

Ich glaube, dass es in der Spieleentwicklung weit verbreitet ist. In deinem Fall hast du zwei Möglichkeiten:

1) Lassen Sie nur einen Thread laufen, während Sie Ihr Debugging durchführen.

2) Unit-Tests machen & lt; = Das ist die "beste Praxis".
   Sie können beginnen, indem Sie sich NUnit

ansehen     
Louis Kottmann 03.12.2011 18:16
quelle
0

Das erste Problem hat wahrscheinlich etwas mit den Sequenzpunkten im JITed-Code zu tun. Dies sind die Punkte, an denen der Debugger stoppen kann. Sie werden von der Laufzeit basierend auf den IL- und Debug-Symbolen berechnet, die vom Compiler generiert werden, daher handelt es sich wahrscheinlich um einen Laufzeit- oder Compilerfehler. Ich weiß nicht, welche Version der Mono-Laufzeitumgebung und des Compilers von Unity verwendet wird, aber es ist ziemlich sicher, dass dies in einer neueren Version behoben wurde. Wenn Sie dies mit einer "normalen" Konsolen-App unter Verwendung der neuesten offiziellen MonoDevelop- und Mono 2.10.x-Versionen reproduzieren können, reichen Sie bitte einen Fehler bei Ссылка ein ein Testfall. Wenn nicht, bitte Unity, ihre Version von Mono zu aktualisieren.

Das zweite Problem scheint ein Problem im Expression Resolver von MonoDevelop zu sein, mit dem das Symbol unter der Maus aufgelöst wird. Dies könnte in einer neueren Version von MonoDevelop behoben worden sein - versuchen Sie bitte ebenfalls, das offizielle MonoDevelop 2.8.4 zu reproduzieren, und melden Sie einen Fehler, wenn es immer noch ein Problem ist.

    
Mikayla Hutchinson 12.12.2011 18:57
quelle

Tags und Links