2012-09-05 13 views
20

Visual Studio 2010 SP1, compilata app WCF, posta su un server e, naturalmente, ha ricevuto un errore durante la prima esecuzione (cosa c'è di nuovo), ha emesso Stack Trace per registrare il file.Perché la traccia dello stack mostra il percorso dei miei file di sviluppo?

Sta vedendo il percorso del mio ambiente di sviluppo. Perché? È perché l'ho distribuito come Debug rispetto a Release o c'è qualcos'altro, o dovrei essere più attento a emettere Tracce di Stack a prescindere?

04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.Logging.LogMessageToFile(String msg, Boolean isUsingClickOnceApp) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\Logging.cs:line 63 
    at App1.App1Main.ConnectWebService(String description) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\International.cs:line 40 
04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.App1Main.UpdateActivityLog(String data, String userName, Boolean deleteData, Int64 firstId, Int64 lastId, String changeType) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\App1Main.cs:line 641 

Grazie, -Rob

+1

"E 'perché ho schierato come Debug" –

+0

come Amiram detto, si sta vedendo il percorso di debug perché è compilato in di debug ... – Chris

+1

possibile duplicato [stacktrace informazione preservare percorsi di fonte originale] (http://stackoverflow.com/questions/388470/stacktrace-information-preserving-paths-of-original-source) – Cocowalla

risposta

38

È perché hai copiato i file .pdb e gli eseguibili. Il CLR li cercherà quando genera una traccia dello stack per cercare di fornire quante più informazioni possibili sui frame dello stack nella traccia. Il .pdb memorizza il nome del file di origine e il numero di riga.

Si suppone di distribuire la versione di rilascio del codice. Ciò consente ottimizzazioni che possono far funzionare il tuo codice molto più velocemente. Puoi ancora copiare i file .pdb per quella build, normalmente hanno le informazioni di debug spogliate. Progetto + Proprietà, passa all'impostazione Release build, Build, Advanced, "Debug Info". L'impostazione normale qui per build di release è "pdb-only" anziché "full". Il che implica che il file sorgente e il numero di riga non sono inclusi. Il che ha senso, le tracce di stack tendono ad essere un po 'inaffidabili dopo che il jitter ha ottimizzato il codice.

+0

@Cocowalla: entrambe ottime risposte. Grazie ragazzi per le spiegazioni approfondite. Mi rendo conto che dovrei usare la versione di Release, ma se non usi TFS o un certo ciclo di vita dello sviluppo, puoi dimenticare quel fatto secondario. ;-) –

3

È normale che il percorso del file sorgente originale da memorizzare nel PPB (program database) file durante la distribuzione in modalità debug.

Problemi correlati