visual símbolos studio puede omitió encuentra carga archivo abrir c++ visual-studio-2010 visual-c++ linker pdb-files

símbolos - LNK1201 Visual C++ 2010 Proyecto grande que falla al generar PDB



no se encuentra el archivo pdb o no se puede abrir visual studio 2015 (3)

¿Has intentado reducir el número de construcciones paralelas? Un escenario en algún lugar del IDE. En VC9 tuvimos un problema similar y nuestra única solución fue reducir el número de construcciones locales. ¿Podría ser también un problema de memoria? ¿Estás utilizando VC 10 SP1?

Hemos pasado por los puntos enumerados en MSDN WRT para este error (a excepción del # 5). Tres personas diferentes en máquinas diferentes tienen el mismo problema. El PDB se crea, pero falla en algún lugar en el medio.

Detalles:

  • 67 bibliotecas estáticas
  • 4.27 GB de bibliotecas estáticas
  • 1048575 bytes - tamaño de PDB cuando falla el enlazador
  • Los últimos dos megabytes del PDB son nulos (cero)
  • La versión de lanzamiento es exitosa y produce un PDB (lo tenemos activado, sin información de depuración en el exe)
  • La versión de lanzamiento de PDB es un poco menos de 1 GB.

Hemos deshabilitado los escáneres de virus. Observó con procmon.exe y no vio interacciones sospechosas con el PDB cuando el enlazador falló.

La pregunta relacionada sugiere un límite de ~ 1 GB en los PDB: ¿alguien / forma de confirmar eso?

ACTUALIZACIÓN Y SOLUCIÓN:

@Barry y el equipo de cromo han encontrado la solución. Here está el parche para el sistema de construcción Chromium que implementa la resolución.

Detalles
El PDB utiliza internamente un sistema de archivos virtual: MSF . Cuando el enlazador crea el archivo PDB, su valor predeterminado es un tamaño de página de 2 KB (aparentemente no configurable). Aparentemente y afortunadamente, cuando el compilador crea su PDB, el tamaño predeterminado de la página es de 4 kB. Este compilador PDB se puede izar y utilizar como base para el enlazador PDB.

Mejor solución Como evento Pre-Link en el proyecto que está vinculando su exe o dll, podemos levantar el compilador para generar nuestro PDB inicial requerido:

cl -c "dummy_empty.cpp" /Zi /Fd"$(TargetDir)$(TargetName).pdb"

Solución original
Cree un proyecto de biblioteca estática de C ++ con un archivo cpp vacío, configure el ''Nombre de archivo de la base de datos de Porgram'' para que genere algo distinto al predeterminado. Use algunos eventos de compilación de proyectos (usé ''Evento de enlace previo'') para copiar en el PDB creado anteriormente en el lugar donde esté esperando el enlazador (vea Vinculador-> Generar archivo de base de datos del programa) para crear su PDB. Afortunadamente, el enlazador adoptará lo copiado en PDB y utilizará su tamaño de página de 4 kB. Esto le permitirá ganar algo de tiempo y un poco de espacio que permita hasta un PDB de 2GB.


De hecho, hay un límite máximo de 1GB para el tamaño de pdb. Hay algún truco para extender esto a 2GB (más información sobre esto se puede encontrar Here ). Básicamente tienes que generar el archivo pdb inicial tú mismo en lugar del compilador.

Otras cosas que podría hacer es hacer un levantamiento activo en el código de su plantilla, ya que esto también podría afectar el tamaño de sus pdb.


Reuní un programa de prueba con 1000 archivos cpp, cada uno con una función, que creaba 500 tipos de plantillas únicas.

Link.exe falló cuando se alcanzó el archivo PDB: 1048575 KB.

Parece ser una especie de límite rígido de 1 GB en formato PDB o en LINK.exe.