2012-06-19 57 views
13

Uso siempre para echar un vistazo al ejecutable binario final o dll después de la depuración y creación de un archivo con cualquier IDE. Ahora estoy intentando Visual C++ 2010, en la búsqueda de la mejor versión, sin basura o referencias innecesarias. Entonces, creé una nueva solución con dos proyectos: un ejecutable y su dll. VC++ creó una gran cantidad de archivos intermedios entre el código y el archivo final. Abrí .exe y .dll con un editor hexadecimal y vi algo que no me gusta. En algún lugar dentro del archivo hay una ruta de acceso absoluta al archivo .PDB.Eliminar referencias de PDB del archivo publicado

¿Por qué? ¿Cómo puedo eliminarlo de VC++?

Debe haber algún comando de preprocesador para esto. ¿Para qué sirve una ruta de acceso absoluta a un archivo .PDB, como "D: \ My Projects \ Project1 \ Release \ Project1.pdb" dentro del archivo binario de un archivo que se distribuirá en equipos con diferentes carpetas? Además de eso, no me gusta ver una de las rutas de mi unidad guardada dentro de un archivo binario que quiero compartir con otras personas. Estoy en modo de lanzamiento, no veo el uso de esa información innecesaria. ¿Cómo podría eliminarlo? ¡Gracias!

+0

duplicado posible de esta [pregunta] [1]? Puede eliminar la ruta al PDB. Pero, por favor, mantenga la referencia al PDB. [1]: http: // stackoverflow.com/questions/7596628/strip-the-path-to-the-pdb – mox

Respuesta

7

leer la documentación PDB Files en MSDN:

archivo de una base de datos de programa (AP) mantiene información de estado y de depuración proyecto que permite la vinculación incremental de una configuración de depuración de su programa. Se crea un archivo PDB cuando compila un programa C/C++ con/ZI o/Zi o un programa Visual Basic/C#/JScript .NET con/depuración.

En Visual C++, la opción/Fd nombra el archivo PDB creado por el compilador. Cuando crea un proyecto en Visual Studio usando asistentes, la opción/Fd se configura para crear un PDB llamado project.PDB.

Tenga en cuenta que la ruta absoluta se menciona en la documentación:

El depurador de Visual Studio utiliza el archivo project.PDB creado por el enlazador directa e incrusta la ruta absoluta en el AP en el EXE o Archivo DLL.

Siempre se puede ir a Propiedades del proyecto> Enlazador> Depuración> Generar información de depuración y la puso en No.

+0

Es extraño que incluso si estoy en modo Release, los archivos .PDB todavía se generan. Gracias por su respuesta – ali

+0

@ali: Esa es la configuración predeterminada cuando crea un nuevo proyecto. Sin embargo, siempre puedes apagarlo. Tenga en cuenta que el PDB solo es necesario para * depuración * y * vinculación incremental * y no es necesario enviarlo (a menos que desee que sus clientes puedan depurar). – dirkgently

+3

O.K. ¡Gracias! ¡Ahora cambié y funciona! ¡Odio ver cadenas reveladas en código binario! – ali

9

Puede utilizar /pdbpath:none para eliminar el nombre de ruta calificado completa del archivo PDB, pero mantener el nombre y extensión del PDB solamente. Mantener el nombre (y la extensión) del PDB para las imágenes publicadas es la única manera de depurar una imagen con errores. ¡Las imágenes de Windows casi siempre conservan el nombre y la extensión de los PDB!

+3

Esta es la mejor solución, sin embargo las versiones más nuevas renombraron la opción y ahora debe pasar '/ pdbaltpath:% _ PDB%' al enlazador. –

2

Si no les importa usar una herramienta externa y no se puede reconstruir su módulo con/pdbpath: ninguno, la herramienta peupdate se puede utilizar para enumerar, eliminar o cambiar la cadena de AP en un módulo ejecutable:

http://bytepointer.com/tools/index.htm#peupdate

Es posible utilizar la herramienta de la siguiente manera para despejar el camino AP:

peupdate -c <module_path> 
Cuestiones relacionadas