2013-06-15 16 views
12

Ho scoperto come un file .dll di assembly .NET si associa a un .pdb utilizzando un GUID (blog). Quando eseguo il debug in un assembly e richiede il codice sorgente, se si passa a un file, potrebbe dirmi che il codice sorgente è diverso dall'originale. Come lo sa? Mi aspettavo che il file .pdb contenga un checksum per ogni file, ma non sembra. Lo strumento migliore che ho trovato per scaricare le informazioni di debug è dia2dump. I file .pdb C++ avevano voci MD5, ma i file C# .pdb no.Come fa Visual Studio a sapere se il file sorgente corrisponde alla versione originale?

C++ discarica
dia2dump -f dia2dump.pdb>dia2dump.pdb.files.txt

C# discarica
dia2dump -f Autofac.pdb>Autofac.pdb.files.txt
dia2dump -tutti Autofac.pdb>Autofac.pdb.all.txt

c'è qualcosa che perso nella discarica "tutti"?

Deve essere utilizzato un checksum. Se cambio un singolo carattere in Module.cs, ottengo:
enter image description here

Dove trovo il checksum per un file sorgente riferimento in una PDB?

risposta

8

Un checksum MD5 è archiviato nel file .pdb per ogni file sorgente. Se si risponde "No" alla domanda di cui sopra "? Volete il debugger per usarlo in ogni caso", esso stampa il checksum che cercava:

enter image description here

Utilizzando un editor esadecimale, si può vedere è sicuramente nel .pdb. Il mio prossimo compito è capire come accedervi in ​​modo programmatico. Per un file .pdb, voglio che restituisca tutti i nomi dei file di origine e i relativi checksum MD5.

enter image description here

+0

Ho cercato in pdb file molto ultimamente. Puoi trovare maggiori dettagli qui. http://blog.ctaggart.com/search/label/pdb –

+0

Hai mai trovato un modo per estrarre l'hash MD5 dai PDB .NET? – Petrik

+2

L'ho fatto. Ho creato una libreria .NET chiamata SourceLink che può farlo. https://github.com/ctaggart/SourceLink –