Freigeben über


Fehler: Die Ausführung der Funktion 'Funktion' hat das Zeitlimit überschritten und musste auf unsichere Weise abgebrochen werden.

Vollständiger Nachrichtentext: Die Auswertung der Funktion "Funktion" hat einen Timeout überschritten und musste auf unsichere Weise abgebrochen werden. Das Problem kann zu Beschädigungen des Zielprozesses führen.

Um das Untersuchen des Zustands von .NET-Objekten zu vereinfachen, erzwingt der Debugger automatisch den debuggierten Prozess zum Ausführen anderer Code (in der Regel Eigenschaften-Getter-Methoden und ToString-Funktionen). In den meisten Szenarien werden diese Funktionen schnell abgeschlossen und das Debuggen vereinfacht. Der Debugger führt die Anwendung jedoch nicht in einer Sandbox aus. Daher kann eine Eigenschafts-Getter- oder ToString-Methode, die eine systemeigene Funktion aufruft, die nicht mehr reagiert, zu langen Timeouts führen, die möglicherweise nicht wiederhergestellt werden können. Wenn diese Fehlermeldung auftritt, ist dies aufgetreten.

Ein häufiger Grund für dieses Problem ist, dass der Debugger beim Auswerten einer Eigenschaft nur die Ausführung des Threads zulässt. Wenn die Eigenschaft also auf andere Threads wartet, die innerhalb der debuggierten Anwendung ausgeführt werden, und wenn sie auf eine Weise wartet, die .NET-Runtime nicht unterbrechen kann, tritt dieses Problem auf.

So beheben Sie diesen Fehler

In den folgenden Abschnitten finden Sie verschiedene mögliche Lösungen für dieses Problem.

Lösung Nr. 1: Verhindern, dass der Debugger die Getter-Eigenschaft oder die ToString-Methode aufruft

Die Fehlermeldung teilt Ihnen den Namen der Funktion mit, die der Debugger aufgerufen hat. Wenn Sie diese Funktion ändern können, können Sie verhindern, dass der Debugger den Eigenschaften-Getter oder die ToString-Methode aufruft. Probieren Sie eine der folgenden Aktionen aus:

  • Ändern Sie die Methode zu einem anderen Codetyp außer einem Eigenschafts-Getter oder der ToString-Methode, und das Problem verschwindet.

    -oder-

  • (Für ToString) Definieren Sie ein DebuggerDisplay-Attribut für den Typ, und Sie können einen anderen Debugger als ToString auswerten lassen.

    -oder-

  • (Für einen Eigenschafts-Getter) Verwenden Sie das System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never)-Attribut für die Eigenschaft. Dies kann nützlich sein, wenn Sie über eine Methode verfügen, die aus API-Kompatibilitätsgründen eine Eigenschaft beibehalten muss, aber es sollte wirklich eine Methode sein.

Lösung Nr. 2: Lassen Sie den Zielcode den Debugger bitten, die Auswertung abzubrechen.

Die Fehlermeldung teilt Ihnen den Namen der Funktion mit, die der Debugger aufgerufen hat. Wenn die Property Getter- oder ToString-Methode manchmal nicht ordnungsgemäß ausgeführt werden kann, insbesondere in Situationen, in denen das Problem darin besteht, dass Code einen anderen Thread zum Ausführen von Code benötigt, kann die Implementierungsfunktion System.Diagnostics.Debugger.NotifyOfCrossThreadDependency aufrufen, um den Debugger aufzufordern, die Funktionsauswertung abzubrechen. Bei dieser Lösung ist es weiterhin möglich, diese Funktionen explizit auszuwerten, aber das Standardverhalten besteht darin, dass die Ausführung beendet wird, wenn der NotifyOfCrossThreadDependency-Aufruf auftritt.

Lösung Nr. 3: Alle impliziten Auswertungen deaktivieren

Wenn das Problem durch die vorherigen Lösungen nicht behoben wird, können Sie die Option "Eigenschaftenauswertung aktivieren" und andere implizite Funktionsaufrufe deaktivieren. Diese Konfiguration deaktiviert die meisten impliziten Funktionsauswertungen und sollte das Problem beheben.

Erweitern Sie im Bereich "Extras>Optionen" den Abschnitt "Alle Einstellungen>Debugging>Allgemein", und deaktivieren Sie das Kontrollkästchen "Eigenschaftenauswertung und andere implizite Funktionsaufrufe aktivieren".

Im Dialogfeld "Extras>Optionen" den Abschnitt "Debuggen>Allgemein" erweitern und das Kontrollkästchen "Eigenschaftenauswertung und andere implizite Funktionsaufrufe aktivieren" deaktivieren.

Lösung Nr. 4: Überprüfen der Kompatibilität mit Drittanbieter-Entwicklertools

Wenn Sie Resharper verwenden, schauen Sie sich dieses Problem für Vorschläge an.