Wie kann ich Unity bei Ausnahmen zum Stillstand bringen?

9

Ich versuche, ein Unity-Projekt mit dem Unity-Editor und Visual Studio zu debuggen. Eine Laufzeitausnahme wird immer wieder angezeigt, aber der Debugger stoppt nicht, wenn eine Ausnahme auftritt, sodass es unmöglich ist, meinen Code effizient zu debuggen.

In Visual Studio bin ich zu Extras -> Optionen -> Tools für Unity gegangen und habe "Ausnahmeunterstützung" auf "True" gesetzt. Ich habe auch alle Arten von Ausnahmen im Bereich "Ausnahmeeinstellungen" aktiviert . Ich verbinde den Debugger mit Unity über die Schaltfläche "An Unity anhängen". Haltepunkte funktionieren, aber der Debugger wird bei Ausnahmen nicht angehalten.

Was muss ich tun, damit Unity / VS bei Ausnahmen tatsächlich anhält?

Hinweis: Ich habe viele Male versucht, sowohl Unity als auch VS zu schließen und wieder zu öffnen, aber das macht keinen Unterschied.

user45623
quelle

Antworten:

8

Diese Dokumentation zur Vorschau der 2.0 Unity-Tools für VS impliziert, dass Sie sowohl die Unity-Ausnahmeunterstützung über aktivieren müssen Tools -> Options -> Tools For Unity(wie bisher "Ausnahmeunterstützung" auf "true" setzen) als auch die entsprechenden CLR-Ausnahmemasken in den integrierten Ausnahmeeinstellungen von Visual Studio aktivieren müssen Fenster (aktivieren Sie das Kontrollkästchen neben "Common Language Runtime Exceptions").

Um das beste Ergebnis zu erzielen, sollten Sie das Kontrollkästchen CLR-Ausnahmen aktivieren und anschließend deaktivieren, um sicherzustellen, dass alle Ausnahmesubtypen für den Einstieg aktiviert sind.

AJP
quelle
3

Möglicherweise müssen Sie noch ein paar Dinge tun, damit dies funktioniert. In meinem Fall wollte ich, dass die in Unity integrierten Assertions Ausnahmen auslösen, die von VS abgefangen werden. Ich musste Folgendes tun, um dies zu erreichen.

  1. Konfigurieren Sie die Assert-Klasse von Unity so, dass Ausnahmen über ausgelöst werden Assert.raiseExceptions=true
  2. Fügen Sie den spezifischen Ausnahmetyp zum Fenster mit den Ausnahmeeinstellungen von VS hinzu. (Klicken Sie mit der rechten Maustaste, wählen Sie Hinzufügen und geben Sie ein. UnityEngine.Assertions.AssertionException)
LevitatingKestrel
quelle
Gibt es noch andere Schritte, die Sie unternommen haben, um Unity Assertions zum Werfen zu bringen? Diese beiden Schritte scheinen bei Unity 2014 LTS answers.unity.com/questions/1581028/…
Jethro
1
Nein, ich habe jedoch Unity 2018.xx verwendet. Ist es möglich, dass ältere Versionen von Unity einen anderen Assertion-Typ verwendet haben? (In diesem Fall müssen Sie dieser Liste einen etwas anderen qualifizierten Typnamen hinzufügen.)
LevitatingKestrel
1
Außerdem habe ich festgestellt, dass in VS Community 15.9.2 - in dieser Liste ein neues Kontrollkästchen für <All Common Language Runtime Exceptions not in this list>( siehe Kategorie "Common Language Runtime Exceptions") vorhanden ist. Wenn die Ausnahmen, die Sie versuchen, aus Unity heraus zu fangen, nicht tatsächlich sind AssertionException, ist dieses Kontrollkästchen möglicherweise so umfassend, dass Sie das fangen, wonach Sie suchen.
LevitatingKestrel
2

Ich denke, eine schnelle Lösung, die Sie versuchen können: Schreiben Sie ein Fehlerprotokoll in den Ausnahmeblock des Codes

Debug.LogError("Exception occured");

Öffnen Sie vor dem Ausführen des Editors die Konsole und klicken Sie im Konsolenprotokoll auf Fehlerpause. Geben Sie hier die Bildbeschreibung ein

Das Spiel wird angehalten, wenn ein Fehler in der Konsole aufgetreten ist.

Muhammad Faizan Khan
quelle