¿Por qué Visual Studio 2010 no puede encontrar / abrir archivos PDB?

83

Estoy intentando usar OpenCV en VS 2010. Soy un aficionado y estoy aprendiendo los primeros pasos del wiki de OpenCV. Sin embargo, cuando intento depurar mi proyecto, obtengo los siguientes errores:

'C: \ Windows \ SysWOW64 \ ntdll.dll', No se puede encontrar o abrir el archivo PDB 'C: \ Windows \ SysWOW64 \ kernel32.dll', No se puede encontrar o abrir el archivo PDB 'C: \ Windows \ SysWOW64 \ kernellbase. dll ', no se puede encontrar o abrir el archivo PDB

Tengo esos archivos en el directorio correcto, entonces, ¿por qué no puedo abrirlos? ¿Qué debo hacer para solucionar el problema?

HamidRezaHamidiEsfahani
fuente
¿Qué quiere decir con "en el directorio correcto"? ¿Está la PDB en la misma carpeta que la DLL?
harper
1
@harper: Teniendo en cuenta que las bibliotecas en cuestión son archivos de sistema de Windows, no son, probablemente, los PDB supone estar en la misma carpeta que el archivo DLL. Las DLL están en el directorio C: \ Windows \ SysWOW64, pero los símbolos PDB probablemente estarán en su directorio de caché de símbolos diseñado. El que especifique en las opciones de depuración de Visual Studio.
Cody Gray
@Cody Gray: ¿Puede copiar las PDB al directorio (manualmente) o debe utilizar los servidores de símbolos de Microsoft (fuente)?
harper
@harper: No tengo ni idea de si funcionará de esa manera. No estoy seguro de si Visual Studio encontrará los símbolos PDB allí (aunque imagino que lo haría ). Pero, en lo que respecta a las licencias, estoy bastante seguro de que debe usar los servidores de símbolos de MS. ¿De qué otra manera va a obtener los archivos PDB? Tampoco estoy seguro de por qué querrías boicotear esto. Visual Studio tiene todas estas funciones integradas, así que, ¿por qué no aprovecharlas? Está diseñado para almacenar en caché los símbolos localmente, por lo que no es necesario volver a descargarlos cada vez. Ni siquiera me doy cuenta de que ya está sucediendo.
Cody Gray
@Cody Gray: No quiero boicotear nada. Ni siquiera tengo estos PDB. Pero tengo curiosidad por saber cómo funciona.
harper

Respuestas:

124

Primero cambie los siguientes parámetros:

Herramientas -> Opciones -> Depuración -> Símbolos -> Servidor -> Sí

Luego presione Ctrl+ F5y verá cosas increíbles.

seanlitow
fuente
2
¡Guauu! ¡Eso fue asombroso! Gracias por esta respuesta. +1 para ti!
Matthew Crews
Para que quede claro, esto solo descargará los símbolos una vez, ¿verdad? ¿No me impedirá trabajar sin conexión en absoluto?
Seanny123
1
¿Conoce un enlace directo para descargarlo? Trabajo en una red cerrada sin acceso a Internet.
levkaster
2
Euhm ... Control F5 no adjunta el depurador AFAIK. Así que esta respuesta no tiene sentido.
Buckley
1
Hice lo mismo que dijiste. pero ahora muestra que se cargan algunos símbolos mientras que el resto del archivo pdb no se agrega
Hemant Parihar
20

Estoy bastante seguro de que son advertencias , no errores. Su proyecto aún debería funcionar bien.

Sin embargo, dado que siempre debe intentar corregir las advertencias del compilador, veamos qué podemos descubrir. No estoy familiarizado en absoluto con OpenCV y no enlazas con el tutorial wiki que estás siguiendo. Pero me parece que el problema es que estás ejecutando una versión de Windows de 64 bits (como lo demuestra la carpeta "SysWOW64" en la ruta de los archivos DLL), pero las cosas de OpenCV que estás probando están compiladas para una plataforma de 32 bits. Por lo tanto, es posible que deba reconstruir el proyecto utilizando CMake, como se explica aquí .

Más específicamente, los archivos que se enumeran son archivos del sistema de Windows. Los archivos PDB contienen información de depuración que Visual Studio usa para permitirle ingresar y depurar código compilado. En realidad, no necesita los archivos PDB para que las bibliotecas del sistema puedan depurar su propio código. Pero si lo desea, también puede descargar los símbolos de las bibliotecas del sistema. Vaya al menú "Depurar", haga clic en "Opciones y configuración" y desplácese hacia abajo en el cuadro de lista de la derecha hasta que vea "Habilitar la compatibilidad con el servidor de origen". Asegúrese de que esa opción esté marcada. Luego, en la vista de árbol a la izquierda, haga clic en "Símbolos" y asegúrese de que la opción "Servidores de símbolos de Microsoft" esté seleccionada. Haga clic en Aceptar para cerrar el cuadro de diálogo y luego intente reconstruir.

Cody Grey
fuente
7
No estoy seguro de qué se supone que debo decir en respuesta a eso. ¿Buscas más ayuda? ¿O simplemente estás dejando un comentario? Porque si está buscando más ayuda, tendrá que explicar qué salió mal exactamente cuando "intentó esto" y qué quiere decir con "no funcionó". Todos somos programadores, sabes que no es así como se archiva un informe de error útil.
Cody Gray
Lo siento por alguna razón no se pegó todo mi mensaje. Pero desde entonces lo he arreglado usando el siguiente método. stackoverflow.com/questions/1468726/…
daveomcd
10

Visual Studio Community Edition 2015

He tenido este error todo el día. Finalmente lo arreglé yendo a Herramientas> Importar y exportar configuraciones> Restablecer todas las opciones> Restablecer configuración general.

Una vez que se restablezca, vaya a Herramientas> Opciones> Depuración> Símbolos> - Luego marque la casilla junto a Microsoft Symbol Servers.

Ejecute su aplicación en modo de depuración y se abrirá una ventana que dice que está descargando símbolos para un montón de archivos .dll diferentes. Deja que termine de hacer esto.

Una vez que se complete, debería funcionar nuevamente.

Nadie
fuente
La actualización a VS2109 16.8.1 de alguna manera destruyó el caché de símbolos, que desde la memoria podría haber residido en el directorio Users / Temp. Es posible que el restablecimiento general sugerido no sea necesario antes de volver a adquirir los símbolos. Asegúrese de que los símbolos tengan un directorio de caché seguro y espere aproximadamente una hora para que se carguen (~ 375mb). Elegí MS sobre el servidor Nuget solo por la fuerza de la costumbre. En lugar del reinicio, la cura para la paranoia fue eliminar todos los archivos generados por VS (excepto .git) para el proyecto antes de comenzar de nuevo.
Laurie Stearn hace
3

Yo tuve el mismo problema. Resulta que, al compilar un proyecto que recibí de otra persona, no configuré el proyecto de inicio correcto (haga clic con el botón derecho en el proyecto de inicio deseado en el explorador de soluciones y seleccione "establecer como proyecto de inicio"). Quizás esto ayude, salud.

Jurek Stefanowicz
fuente
1

Refiriéndose al primer hilo / otra posibilidad que VS no puede abrir o encontrar el archivo pdb del proceso es cuando tiene su ejecutable ejecutándose en segundo plano. Estaba trabajando con mpiexec y encontré este problema. Siempre verifique su administrador de tareas y elimine cualquier proceso ejecutivo que vaya a construir en su proyecto. Una vez que hice eso, se depuró o construyó bien.

Además, si intenta continuar con la advertencia, los puntos de interrupción no se alcanzarán y no tendrá el ejecutable actual

Mpi
fuente
1

Para los usuarios de VS2013 que se encuentran aquí como yo:

Tools -> Options -> Debugging -> Symbols

Verá que el Cache symbols in this directory:campo está vacío; puede navegar / ingresar la ruta usted mismo o simplemente seguir adelante y hacer clic en el Load all symbolsbotón. Aparecerá una ventana de alerta que dice "Como no ha seleccionado un directorio de caché de símbolos, se utilizará el predeterminado". Ahora verá C:\Users\XXXX\AppData\Local\Temp\SymbolCacheen el campo de ruta previamente vacío. Haga clic Load all symbolsuna segunda vez y debería estar listo. Haga clic en Aceptar, y por el simple hecho de ser diligente, limpie y reconstruya su solución.

una sala
fuente
0

Descubrí que estos errores a veces se deben a la falta de permisos al compilar un proyecto, por lo que corro como administrador para que funcione correctamente.

Siniestro
fuente
0

Tengo las mismas advertencias. No estoy seguro de que sea una cuestión de 32 vs 64 bits. Acabo de cargar los nuevos símbolos y se solucionaron algunos problemas, pero los relacionados con OpenCV aún persisten. Este es un extracto de la salida con problema resuelto vs no resuelto:

'OpenCV_helloworld.exe': cargado 'C: \ OpenCV2.2 \ bin \ opencv_imgproc220d.dll', no se puede encontrar o abrir el archivo PDB

'OpenCV_helloworld.exe': cargado 'C: \ WINDOWS \ system32 \ imm32.dll', símbolos cargados (información de origen eliminada).

El código sale 0 en caso de que alguien pregunte.

El programa '[4424] OpenCV_helloworld.exe: Native' ha salido con el código 0 (0x0).

sparaflAsh
fuente
0

Yo tuve el mismo problema. La depuración no funciona con las cosas que vienen con el ejecutable OpenCV. tienes que construir tus propios binarios.
Luego habilite los servidores de símbolos de Microsoft en Depurar-> opciones y configuraciones-> depurar-> símbolos

john ktejik
fuente
0

Me encontré con el mismo problema. Cuando ejecuté mi prueba unitaria en código C ++, recibí un error que decía "No puedo encontrar o abrir el archivo PDB".

Registros

Cuando miré el registro de salida en Visual Studio, vi que estaba buscando en la carpeta incorrecta. Había cambiado el nombre de la carpeta WinUnit, pero algo en el código de WinUnit buscaba el archivo PDB con el nombre de la carpeta anterior. Supongo que lo codificaron.

Encontré el problema

Cuando descargué y descomprimí por primera vez los archivos de WinUnit, la carpeta principal se llamaba "WinUnit-1.2.0909.1". Después de descomprimir el archivo, cambié el nombre de la carpeta a "WinUnit", ya que es más fácil escribir durante la configuración del proyecto de Visual Studio. Pero aparentemente esto rompió la capacidad de encontrar el archivo PDB, aunque configuré todo de acuerdo con la documentación de WinUnit.

Mi solución

Cambié el nombre de la carpeta al original y funciona.

Extraño.

usuario2384458
fuente
0

Tuve el mismo problema aquí, pero funcionó una solución diferente.

Primero, probé lo siguiente, ninguno de los cuales funcionó:

  1. Cargue los símbolos como lo sugiere seanlitow

  2. Eliminar / Agregar referencia a PresentationFramework y PresentationCore

  3. Reiniciar el sistema

La solución fue deshacer los últimos cambios que hice en mi código. Acababa de agregar un par de botones de opción y controladores de eventos para eventos marcados y no marcados. Después de eliminar mis cambios recientes, todo se compiló. Luego agregué mis cambios exactos y todo se compiló correctamente. No entiendo por qué funcionó, lo único que se me ocurre es un problema con mi solución VS. De todos modos, si ninguna de las otras sugerencias funciona, puede intentar revertir los cambios más recientes. NOTA: si cierra y vuelve a abrir Visual Studio, su historial de deshacer se pierde ... así que puede intentar esto antes de cerrar VS.

Thomas Bailey
fuente