2015-07-15 10 views
9

Oggi stavo eseguendo il debug di un'applicazione nel mio lavoro. Ho proceduto a impostare un punto di interruzione in uno dei miei blocchi di cattura al fine di ispezionare un'eccezione con maggiori dettagli.

La finestra View Detail modale si apre normalmente, ma invece di mostrare i particolari del l'eccezione, si sta gettando un errore di strano, quello che ho mai avuto, né io so cosa vuol dire:

View Details Exception

l'errore dice:

il nome '$ eccezione' non esiste nel contesto attuale

Questo è frustrante perché sono all'interno dell'ambito del blocco catch, quindi dovrei essere in grado di vedere la mia eccezione.

Dopo il riavvio dell'applicazione, sono riuscito a eseguire il debug in modo corretto. Questa è stata l'unica volta (finora) ho ricevuto questo errore.

Qualcuno sa cosa significa e come posso risolverlo (senza dover riavviare l'applicazione)?

NOTA: Sto utilizzando Visual Studio 2012 Premium. Versione 11.0.61030.00 Update 4

+0

$ eccezione assomiglia a qualcosa in JavaScript, C# non avrebbe la $ davanti puoi verificare che i tuoi file JS non siano quelli che lanciano l'errore? –

+0

@RonBeyer Questa applicazione non gestisce affatto JS. È interamente scritto in C#, e puoi anche vedere che il tipo di eccezione è 'System.Net.Http.HttpRequestException' che è un'eccezione .NET –

+5

' $ exception' è magia del debugger per "l'eccezione corrente". A volte alcuni bit vengono capovolti senza motivo e il debugger smette di funzionare, succede. – CodeCaster

risposta

0

Date un'occhiata alla biblioteca di MSDN: https://msdn.microsoft.com/en-us/library/ms164891.aspx

Secondo loro, si otterrà un'eccezione se si tenta di valutare un oggetto eccezione se si è verificato non fa eccezione. Ma, visto che sei nel blocco catch, si è verificata un'asciugatura ... Senza vedere il tuo codice è difficile da indovinare, ma forse è possibile che tu abbia più thread in esecuzione e l'eccezione sia stata consumata da un thread prima di essere gestita da un altro? Non ha davvero senso, ma vale la pena guardare. Un'opzione di sicurezza (r) sarebbe quella di assicurarsi di verificare se l'eccezione è nullo nel proprio registratore, prima di cercare di ottenere dettagli da essa. Vale anche la pena guardare: HttpRequestException contiene un'eccezione interna, che potrebbe essere l'origine del riferimento null? Sto solo speculando.

0

Sono d'accordo con trapsuutjies, probabilmente non c'è eccezione. Per eliminare questo errore, premere Ctrl + Alt + E, espandere Assistente debug gestito e deselezionare LoadFromContext.

0

Quando ho visto questo errore, ricevevo anche errori "Impossibile valutare l'espressione" nel debugger. Che mi portano a questo post da Rick Strahl che dicono che è un bug nella versione originale di Visual Studio 2013.

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

Quando ho controllato la macchina ero su, di fatto aveva VS2013 senza che nessuno dei gli aggiornamenti installati. L'installazione degli aggiornamenti ha risolto il problema.

1

Provare esplicitamente a dire al compilatore come importare la DLL.Es:

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

ho risolto lo stesso problema in questi passaggi:

fase 1) Se si programma la DLL personalizzata in C++ utilizzando Visual Studio, poi alla pagina delle proprietà del progetto impostare il parametro Common Language Runtime Support (/clr) a Common Language Runtime Support (/clr).

punto 2) alla funzione di decelerazione in uso di file .h__declspec(dllexport) parole chiave come di seguito:

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

fase 3) Costruire e file di DLL di esportazione, quindi utilizzare il software Dependency Walker per ottenere la vostra funzione EntryPoint.

step4) di file DLL Importa Nel progetto C# e impostare EntryPoint e CallingConvention variabile come di seguito:

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

    public static extern double Sub(int a,int b); 
Problemi correlati