2015-07-15 15 views
9

Heute habe ich eine Anwendung in meiner Arbeit debuggen. Ich fuhr fort, einen Haltepunkt in einen meiner Fangblöcke zu setzen, um eine Ausnahme detaillierter zu untersuchen.

Die View Detail modalen Fenster öffnen mich normalerweise, sondern mir die Details der Ausnahme zeigt, es ist einen seltsamen Fehler zu werfen, den ich nie bekam, noch ich weiß, was es bedeutet:

View Details Exception

der Fehler sagt:

der Name '$ exception' existiert nicht im aktuellen Kontext

Das ist frustrierend, weil ich mich innerhalb des catch-Block-Bereichs befinde, daher sollte es mir möglich sein, meine Ausnahme zu sehen.

Nach dem Neustart meiner Anwendung, habe ich es geschafft, es gut zu debuggen. Dies war das einzige Mal (bis jetzt), dass ich diesen Fehler bekommen habe.

Weiß jemand, was es bedeutet und wie kann ich es beheben (ohne die Anwendung neu zu starten)?

HINWEIS: Ich verwende Visual Studio 2012 Premium. Version 11.0.61030.00 Update 4

+0

$ exception wie etwas in Javascript aussieht, C# würde die $ nicht haben vor Kannst du überprüfen, dass deine JS-Dateien nicht die Fehler sind, die den Fehler verursachen? –

+0

@RonBeyer Diese Anwendung behandelt JS überhaupt nicht. Es ist vollständig in C# geschrieben, und Sie können auch sehen, dass der Ausnahmetyp ist "System.Net.Http.HttpRequestException", die eine .NET-Ausnahme ist –

+5

'$ Ausnahme 'ist Debugger Magie für" die aktuelle Ausnahme ". Manchmal werden einige Bits ohne Grund umgedreht und der Debugger funktioniert nicht mehr. – CodeCaster

Antwort

0

Werfen Sie einen Blick auf MSDN-Bibliothek: https://msdn.microsoft.com/en-us/library/ms164891.aspx

Nach ihnen, werden Sie eine Ausnahme, wenn Sie versuchen, eine Ausnahmeobjekt zu bewerten, wenn keine Ausnahme aufgetreten ist. Da Sie sich jedoch im catch-Block befinden, ist eine Ausnahme aufgetreten ... Ohne Ihren Code zu sehen, ist es schwer zu erraten, aber ist es möglicherweise möglich, dass mehrere Threads ausgeführt werden und die Ausnahme von einem Thread verbraucht wurde, bevor sie verarbeitet wird von einem anderen? Es macht keinen Sinn, aber es lohnt sich, es zu betrachten. Eine sichere (r) Option würde sicherstellen, dass Sie überprüfen, ob die Ausnahme in Ihrem Logger ungültig ist, bevor Sie versuchen, Details daraus zu erhalten. Auch lohnt sich: Die HttpRequestException enthält eine innere Ausnahme, die die Quelle Ihrer Nullreferenz sein könnte? Ich spekuliere nur.

0

Ich stimme mit Trapsuutjies überein, es gibt wahrscheinlich keine Ausnahme. Um diesen Fehler zu unterdrücken, drücken Sie Strg + Alt + E, erweitern Sie den verwalteten Debugging-Assistenten und deaktivieren Sie LoadFromContext.

0

Als ich diesen Fehler sah, bekam ich auch Fehler im Debugger "konnte nicht ausgewertet werden". Dies führt mich zu diesem Beitrag von Rick Strahl, der sagte, dass es ein Fehler in der ursprünglichen Version von Visual Studio 2013.

https://weblog.west-wind.com/posts/2013/Nov/21/Visual-Studio-2013-Could-not-evaluate-Expression-Debugger-Abnormality

ist, als ich die Maschine überprüfte ich auf, es war in der Tat hatte VS2013 ohne von die Updates installiert. Durch die Installation der Updates wurde das Problem behoben.

1

Versuchen Sie explizit, dem Compiler mitzuteilen, wie die DLL importiert wird.Ex:

using System; 
using System.Runtime.InteropServices; 

namespace BitmapProcessingCs 
{ 
    public static class NativeMethods 
    { 
     [DllImport("BitmapProcessingCpp.dll", CallingConvention = CallingConvention.Cdecl)] 
     public static extern void GenerateBitmap(IntPtr src, int dimension); 
    } 
} 
0

ich das gleiche Problem in diesen Schritten gelöst:

Schritt 1) ​​ Wenn Sie Ihre benutzerdefinierte DLL in C++ programmieren Visual Studio verwenden, dann auf der Eigenschaftenseite des Projekts setzen Sie den Common Language Runtime Support (/clr) Parameter zu Common Language Runtime Support (/clr).

Schritt 2) Zur Verzögerung in .h Datei __declspec(dllexport) Schlüsselwörter wie unter Verwendung Funktion:

__declspec(dllexport) double Sub(int a,int b); 

Schritt 3) Erstellen und Export DLL-Datei, dann verwenden Sie die Dependency Walker Software, um Ihre Funktion zu erhalten EntryPoint.

step4) Import DLL-Datei im Projekt C# und setzen Entrypoint und Calling Variable wie folgt:

[DllImport("custom.dll", EntryPoint = "[email protected]@[email protected]", CallingConvention = CallingConvention.Cdecl)] 

    public static extern double Sub(int a,int b); 
Verwandte Themen