2009-03-10 13 views
119

Esiste un modo per visualizzare le linee nella traccia di stack per l'assembly .NET generato/distribuito in modalità di rilascio?Visualizza numero di righe in Stack Trace per l'assemblaggio .NET in modalità di rilascio

UPDATE:

La mia applicazione è divisa in tre progetti libreria di classi e un progetto ASP.NET "sito web". 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 oggetto non impostato su un'istanza di un oggetto".

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?

Lavorare soluzione

Distribuzione del file PDB per ogni applicazione risolto il problema numero di riga.

risposta

119
  • Andare nella finestra Proprietà per il progetto in cui si desidera visualizzare i numeri di riga di traccia dello stack.
  • Fare clic sulla scheda "verticale" di Build.
  • Selezionare la configurazione "Rilascio". Controllare il parametro costante DEBUG.
  • Deselezionare il parametro "Codice di ottimizzazione" per evitare il problema occasionale di traccia con il codice inserito (questo passaggio non è essenziale).
  • Premere il pulsante Avanzate ... e selezionare Output -> Informazioni di debug -> pdb-only.
  • Distribuire il file .pdb generato con l'assieme.

realizzato con il commento qui sotto:

  • Un'altra cosa da controllare è nella sezione "Package/Publish Web" che la casella di controllo "Escludi i simboli di debug generati" è anche incontrollata
+2

Devo distribuire il file pdb insieme all'assemblaggio? –

+7

Sì. Ecco dove sono i simboli di debug e numeri di linea. –

+4

Probabilmente non vuoi esporre queste informazioni se non devi. Usalo per eseguire il debug di un problema con i clienti, sì. Ma non sempre lo vuoi fare perché il debug delle informazioni può dare via dati sensibili ed essere un vettore di attacco. A seconda di cosa è la tua app. –

3

Include i simboli di debug con il pacchetto build/deployment.

1

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

+0

Cosa hai trovato? Puoi postare un commento se non vuoi pubblicare una risposta completa. – jumxozizi

7

ho incontrato problemi in passato in cui mi sento la necessità di distribuire i file PDB con una build di rilascio, al fine di 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 rifattorizzato 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.

+0

Questo. E mentre vai, lancia prova prova in luoghi più imprecisi con una grana più fine. E aumentare le guardie all'inizio di queste funzioni se si devono fare delle ipotesi. –

+0

Spesso detto e così vero, tuttavia, esiste un'eredità, ci sono programmatori che scrivono nuovi metodi di grandi dimensioni, e talvolta un metodo di grandi dimensioni è in realtà la cosa migliore da fare (dividerlo è confusionario o YAGNI). Inoltre, anche per un metodo a 5 righe - si restringe la ricerca 5x - quindi i PDB sono un male necessario in produzione a meno che non si prenda il dolore dell'uso di un server di simboli – FastAl

15

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

-3

Questo 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 

C# versione:

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++; 
} 
+0

Sì, non è stato formattato veramente bello .. scusami per quello –

-2

try { // your method } catch (Exception ex) { // log-> ex.ToString(); // it will give you whole exception including line number and
// file name }
Inoltre include file PDB (dalla cartella bin) in distribuzione per ottenere tutta eccezione altro saggio mostrerà solo nome del metodo in cui si verifica un'eccezione.

Problemi correlati