2015-07-08 15 views
16

Sto tentando di usare JetBrains dotPeek Server 1.4 simbolo però ho incontrato alcune assemblee 3rd party che non riescono, con lo status di dotPeek:generazione DotPeek PPB per le assemblee senza directory di debug

Pdb has not been generated because assembly does not contain debug directory 

Utilizzando CFF Explorer I Ho scoperto che questi assembly hanno valori di intestazione Portable Executable (PE) vuoti "Debug Directory".

C'è un (facile) modo di modificare il PE per aggiungere i valori di intestazione della directory di Debug?

risposta

4

de4dot crea un modulo eseguibile .net non valido agli occhi di dotPeek. È un problema di dotPeek, non de4dot, comunque. Ma dal momento che non abbiamo fonti di dotPeek, dovremmo invece modificare de4dot per ottenere l'interoperabilità. Modifica: de4dot.code/modulo AssemblyModule.cs aggiungendo

writerOptions.WritePdb = true; 
module.CreatePdbState(); 

a de4dot.code.AssemblyModule.Save funzione e si compila avere valida funzione PPB nel modulo exe.

Per risparmiare tempo è possibile utilizzare il progetto de4dot con la mia patch: https://github.com/earnol/de4dot/commit/24c6e696fb9251f7d048ac33c88c710013a649d6 Aggiungerà la directory di debug all'eseguibile di output. Basta eliminare il PDB risultante ed eseguire nuovamente dotPeek. Funzionerà perfettamente. Utilizzare qualcosa come: de4dot.exe -f filein.exe -o fileout.exe -fpdb

+0

Ho applicato la modifica di @ ainz-ooal-to-camera all'ultima versione di de4dot e ho compilato una versione binaria per il download: https: // github .com/djkrose/de4dot/releases/tag/v3.1.41592-fpdb – Hannobo