2015-12-23 64 views
5

tracce Stack per NullReferenceException è molto uninformative, hanno appena includono il nome del metodo e lo stack di chiamate. Qualsiasi variabile in un metodo può essere nullo ed è difficile eseguire il debug quando il bug non è riproducibile sulla macchina dev.Ottenere il nome della variabile per NullReferenceException

Sai un modo per ottenere più informazioni su tale errore, ricevendo il nome della variabile, forse? O hai modi migliori per eseguirne il debug?

+1

Non è possibile ottenere il nome della variabile. È possibile determinare la linea in cui si è verificata l'eccezione. – Alex

+0

@Alex Sì ma in produzione che richiede la distribuzione del file .pdb. E questo impedisce anche l'uso di offuscatori. – Elmo

+4

@Elmo Buona fortuna allora. Se stai usando gli offuscatori, la traccia dello stack sarà spazzatura. –

risposta

9

Tenere traccia di quel nome non sempre è possibile (potrebbe essere un'espressione).
E dove è possibile, si verificherebbe un sovraccarico inaccettabile. Si consideri che il runtime dovrebbe tracciare quasi tutte le variabili di riferimento, che sarebbe costoso e proibire ogni sorta di ottimizzazioni.

vedere anche la mia risposta sul Inspect the managed stack e il post sul blog si riferisce.

La soluzione più semplice è quella di costruire in modo più coerente nullo il check-nel proprio codice:

void Foo(Bar b) 
{ 
    if (b == null) throw new ArgumentNullException(nameof(b)); 

    ... 
} 
+0

Particolarmente utile se si include 'Debug.AssertNonNull' (o qualunque cosa dovrebbe essere) solo per il controllo di integrità mentre si esegue il debug in un secondo momento. –

+0

qual è il problema del sovraccarico in stato di debug? –

Problemi correlati