15

Abbiamo un .exe C++ Win32 .exe creato utilizzando Visual Studio 2005 che funziona perfettamente su tutte le macchine che abbiamo testato internamente (XP 32-bit, Vista 32-bit & Windows 7 64-bit). Ma naturalmente, si blocca ripetutamente sulla macchina Vista di un client a 32 bit.Creazione di debug sulla macchina di un cliente

Scavando in giro su diversi siti web ho trovato bocconcini che indicano se spedisco i file PDB (vc80.pdb & projectName PDB), insieme con la build di rilascio del file eseguibile al cliente, c'è qualche modo di generare minidumps quando si verifica un arresto anomalo. Posso quindi caricare il crash dump in Visual Studio e ottenere una traccia dello stack e alcune altre informazioni utili. Anche l'utility Microsoft Watson sembra essere coinvolta in questo processo.

Ma non riesco a trovare tutte le istruzioni chiare sui passi da seguire per rendere questo accada

  • quali file alla nave?
  • come generare un dump di arresto anomalo?
  • e come caricare questo in VS?

Qualcuno può descrivere questo processo?

+1

Non credo che il Dr. Watson sia garantito per esistere in Vista e in seguito. –

risposta

10

Siamo in grado di ottenere i crash-dump del nostro rilascio. sul campo e non è necessario spedire i file pdb con il nostro prodotto.

Io costruisco in chiamate per creare il file di dettagli di arresto anomalo noi stessi nel nostro gestore di eccezioni di primo livello utilizzando MiniDumpWriteDump() credo. Ma anche senza di ciò, si potrebbe fare in modo che l'utente generi il crash file al punto di crash usando il task manager che credo sia menzionato qui: MSDN Instructions for creating dump file.

Una volta ottenuto il file di dettagli, il cliente lo blocca e lo invia per posta elettronica e lo si rilascia su Visual Studio. All'interno VS, è quindi scegliere Debug Misto o debug nativo e utilizza la copia locale del PPB di visualizzare lo stack di chiamate, ecc

Example from a dump I just created from a MS process

2

L'ho fatto qualche tempo fa e penso di aver seguito this guide. Se non funziona, controlla l'utility Windbg, ricordo che non hai bisogno di installarlo, basta copiare ed eseguire, anche da una chiavetta USB

+0

Ho visto l'articolo CodeProject, ma mi è sembrato terribilmente datato (pubblicato nel 2002 e contiene istruzioni per VS .Net 2003). Sai se è applicabile a VS2005? (So ​​che anche il compilatore è antico, ma devo lavorarci sopra). WinDbg sembra promettente ... +1 – Praetorian

+0

Quando l'ho fatto, ho usato VS2008. È sicuramente possibile, ma potrebbe essere necessario apportare qualche ritocco. –

5

Sento il tuo dolore. Dovevo farlo un po 'di tempo fa.

Ad ogni modo, hai provato google Breakpad?

Breakpad è una suite biblioteca e strumento che consente la distribuzione di un applicazione per gli utenti con compilatore fornito le informazioni di debug rimosso, crash record in compatti file "minidump", inviarli di nuovo al server, e produce tracce di stack in C e C++ da questi minidump. Il breakpad può anche scrivere minidump su richiesta per i programmi che hanno non arrestato.

Breakpad è attualmente utilizzato da Google Chrome, Firefox, Google Picasa, Camino, Google Earth, e altri progetti

Lo si può trovare qui: http://code.google.com/p/google-breakpad/

Fa le stesse cose come il altre risposte menzionati, ma lo fa automaticamente, è saviong un sacco di tempo e sforzi

+0

BReakpad sembra abbastanza bello. Grazie per averlo menzionato. – jschroedl

6

Il processo si dovrebbe avere aspetto:

  1. Compilare un file eseguibile e generare un file PDB. Assicurati di non apportare alcuna modifica al codice utilizzato per l'eseguibile o di mantenere un backup.
  2. Spedire l'eseguibile al client. Non è necessario spedire il file PDB. L'unico motivo per spedirlo è se si desidera eseguire il debug sul computer del cliente o utilizzare strumenti come Process Explorer per ottenere una traccia stack con nomi di funzioni a un certo punto. Né sembra essere applicabile nel tuo caso.
  3. Se si tratta di un computer XP/2003, utilizzare drwtsn32 per configurare la creazione di un dump di arresto anomalo. Se è Vista/7/2008, drwtsn32 è ritirato e devi configurare WER instead. Un'altra opzione è utilizzare ADPlus per avviare l'app.
  4. Una volta che si verifica l'arresto anomalo, restituire il dump a te e caricarlo in Visual Studio. Per eseguire correttamente il debug, è necessario avere esattamente lo stesso codice, eseguibile e PDB.

Nota:

  • WinDbg è utile per il debugging su ambiente di produzione. È un debugger molto potente ed è portatile, ma se sei abituato a VS, ti sarà più comodo usarlo.
  • Se si crea un minidump, si ottengono tracce dello stack e alcuni valori di variabili. Se si crea un dump completo, si otterrà l'heap completo, comprese tutte le variabili e un file di dump molto più grande ... Se il trasferimento non è un problema, utilizzare i dump completi.
  • Se si register at Microsoft, è possibile avere accesso ai dump creati quando il programma si arresta in modo anomalo nei siti dei client. È così fastidioso "Invia le informazioni a Microsoft?" la finestra si ottiene quando un processo si blocca che invieranno la discarica a MS, e avrete accesso ad esso ...
1

Se il client utilizza Vista SP1 o versione successiva, è possibile configurare il sistema per generare un file di dump locale ogni volta che si verifica un arresto anomalo dell'applicazione. È possibile trovare la documentazione completa su MSDN site.

È possibile mantenere tutti i PDB privati. Questi sono necessari solo quando si analizza il file di dettagli.Se si desidera tenere traccia dei PDB corrispondenti alle versioni del prodotto spedito, si consiglia di prendere in considerazione l'utilizzo di un server di simboli.

Problemi correlati