In primo luogo, il problema: Ho diversi progetti gratuiti e come ogni software contengono bug. Alcuni utenti quando incontrano un bug mi inviano segnalazioni di bug con tracce dello stack. Per semplificare la ricerca di un errore, voglio vedere i numeri di riga in questo stack. Se l'applicazione viene spedita senza file .pdb, tutte le informazioni sulla linea vengono perse, quindi al momento tutti i miei progetti sono distribuiti con file .pdb e quindi le tracce dello stack generate hanno questi numeri. Ma! Ma non voglio vedere questi file in distribuzione e voglio rimuovere tutti i .pdb. Essi confondono gli utenti, consumano spazio nel programma di installazione, eccRicrea traccia di stack con i numeri di riga del rapporto bug utente in .net?
soluzione Delphi: Molto tempo fa, quando ero un programmatore Delphi, ho usato la seguente tecnica: il mio cammino eccezione applicazione su stack e raccogliere indirizzi. Quindi, quando ricevo il bug report, ho usato uno strumento che ricostruisce la traccia dello stack valida con nomi di funzioni e numeri di linea in base agli indirizzi raccolti e ai corrispondenti file di simboli che si trovano sulla mia macchina.
Domanda: C'è qualche lib, o tecnica o qualsiasi altra cosa per fare lo stesso in .NET?
Aggiornamento di stato: Molto interessante, che spesso fare una domanda è il modo migliore per iniziare la propria indagine. Per esempio, penso a questo problema da un po 'di tempo, ma inizio a cercare risposte solo alcuni giorni fa.
Opzione 1: MiniDump. Dopo molte ricerche ho trovato un modo per creare un mini dump dal codice e come ricreare lo stack dal mini dump gestito.
- assemblaggio Redistributable per creare mini codice del modulo discarica - clrdump
- Blog post su usando precedente assemblea - Creating and analyzing minidumps in .NET production applications
Questa soluzione però bisogno di ridistribuire due gruppi supplementari (~ 1 MB di dimensione), e i mini dump richiedono un po 'di spazio, e non è comodo per l'utente inviarli via email. Quindi per i miei scopi, al momento, è inaccettabile.
Opzione 2: grazie a weiqure per l'indizio. È possibile estrarre l'offset IL gestito per ogni frame dello stack. Ora il problema è come ottenere i numeri di riga da .pdb in base a questi offset. E quello che ho trovato:
- PDB File Internals, solo per informazione, perché:
- ISymbolReader - Interfaccia riuscito a leggere i file di database programma
- E infine una tool to convert .pdb files to structured xml per una facile trasformazione XPath
Usando questo strumento, è possibile creare file xml per ogni build di rilascio e metterli in repository. Quando si verifica un'eccezione sul computer dell'utente, è possibile creare un messaggio di errore formattato con offset IL. Quindi l'utente invia questo messaggio (molto piccolo) per posta. E infine, è possibile creare un semplice strumento che ricrea lo stack risultante dal messaggio di errore formattato.
Mi chiedo solo perché nessun altro non implementa uno strumento come questo? Non credo che questo sia interessante solo per me.
FYI: In Delphi questo è facile ora perché c'è madExcept che mette una traccia dello stack e altre informazioni utili in un report su eccezioni (non gestite). – schnaader
Quale opzione hai scelto? Anch'io sto cercando una soluzione. – Giorgi
Ho scelto la seconda opzione e scrivo un mucchio di classi per sostituire il dump delle eccezioni interno. Ho anche in programma di scrivere un articolo sulla mia soluzione con tutte le informazioni e le fonti. – arbiter