Visualizza il numero di linee in Stack Trace per .NET assembly in modalità Release

C’è un modo per visualizzare le linee nella traccia dello stack per l’assemblaggio .NET compilato / distribuito in modalità di rilascio?

AGGIORNARE:

La mia applicazione è divisa in tre progetti di librerie di classi e un progetto “sito Web” di ASP.NET. L’errore che sto cercando di rintracciare è in uno dei tre progetti di libreria di classi. Ho solo distribuito il file pdb per il progetto della libreria di classi che genera l’errore “Riferimento object non impostato su un’istanza di un object”.

I numeri di riga non vengono ancora visualizzati nella traccia dello stack. Devo distribuire i file pdb per tutti i progetti per ottenere i numeri di riga nello stack trace?

Soluzione di lavoro

La distribuzione del file pdb per ogni applicazione ha risolto il problema del numero di riga.

  • Andare nella finestra Proprietà per il progetto in cui si desidera visualizzare i numeri di riga di traccia dello stack.
  • Fai clic sulla scheda “verticale” di Build.
  • Seleziona la configurazione “Release”. Controllare il parametro costante DEBUG.
  • Deseleziona il parametro “Ottimizza codice” per evitare il problema occasionale di traccia con il codice inserito (questo passaggio non è essenziale).
  • Premi il pulsante Avanzate … e scegli Output -> Informazioni di debug -> solo pdb.
  • Distribuire il file .pdb generato con l’assembly.

Implementato con il commento qui sotto:

  • Un’altra cosa da verificare è nella sezione “Pacchetto / Pubblica Web” che anche la casella di controllo “Escludi simboli debug generati” è deselezionata

In VS2012 è necessario deselezionare “Escludi simboli debug generati” anche nella sezione Pacchetto / Pubblica Web delle proprietà.

La mia soluzione

Copia il file pdb nella stessa cartella del file eseguibile.

ora posso visualizzare il numero di riga quando eseguo il file exe.

questa è la ragione

http://msdn.microsoft.com/en-us/library/ee416588%28v=vs.85%29.aspx

Ho avuto problemi in passato dove sento la necessità di distribuire file PDB con una build di rilascio per rintracciare un errore. Il motivo è, come hai detto, che l’eccezione si è verificata in un metodo molto ampio e non sono riuscito a individuare con precisione dove si stava verificando.

Questa potrebbe essere un’indicazione che il metodo deve essere refactored in metodi più piccoli e più granulari. Non è una soluzione adatta a tutte le risposte, ma questo approccio mi ha servito bene a breve termine (ho spesso trovato il bug durante il refactoring) e nel lungo periodo.

Solo un pensiero.

Includi simboli di debug con il tuo pacchetto build / deployment.

In VS 2008 Express, l’ho trovato in Proprietà progetto -> Compila -> Opzioni di compilazione avanzate.

Funziona sempre. Hai solo bisogno di sottostrare il messaggio di traccia dello stack. Real facile! Inoltre, in vb.net devi fare “Mostra tutti i file” e includere il pdb.

'Err is the exception passed to this function Dim lineGrab As String = err.StackTrace.Substring(err.StackTrace.Length - 5) Dim i As Integer = 0 While i < lineGrab.Length If (IsNumeric(lineGrab(i))) Then lineNo.Append(lineGrab(i)) End If i += 1 End While 'LineNo holds the number as a string 

Versione C #:

 string lineGrab = error.StackTrace.Substring(error.StackTrace.Length - 5); int i = 0; int value; while (i < lineGrab.Length) { if (int.TryParse(lineGrab[i].ToString(), out value)) { strLineNo.Append(lineGrab[i]); } i++; }