le informazioni di debug non possono essere trovate o non corrispondono a quelle dello studio visivo

Ho copiato un progetto esistente e rinominato la cartella. Ora ricevo questo errore quando provo a compilare l’applicazione

debugging information cannot be found or does not match. No symbols loaded. Do you want to continue debugging ? 

Se faccio clic su Sì, viene compilato e funziona correttamente. Ma ora devo occuparmi di quel messaggio. Solo curioso di sapere cosa cambio nelle proprietà del progetto per farlo smettere.

Il motivo principale è che non hai un pdb e un exe corrispondenti.

Alcune possibili soluzioni:

  • Stai compilando in versione invece di debug
  • Hai bisogno di pulire / build o ribuild
  • Non hai i tuoi file pdb generati nella stessa directory dell’exe
  • Hai un pdb non corrispondente, forse la fonte copiata è più recente della data odierna e qualcosa non si sta creando correttamente.
  • Prova a ripulire tutti i file object di debug
  • Stai eseguendo il collegamento a un processo avviato da una posizione diversa da quella in cui esistono i file exe e pdb di generazione
  • Riavvia Visual Studio

Probabilmente hai distriggersto le informazioni di debug per il tuo progetto:

  • Fai clic con il tasto destro sul tuo progetto -> Proprietà
  • Proprietà di configurazione -> Linker -> Debug
  • Passa “Genera informazioni di debug” da No a Sì

Ricrea il tuo progetto e riprova, ora dovrebbe essere eseguito senza il messaggio 🙂

Mi capita di tanto in tanto, mentre eseguo il debug del codice e apporto le modifiche, sembra che lo studio visivo memorizzi nella cache le informazioni sul pdb e talvolta si blocchi. Fare una soluzione di ricostruzione, eliminare il pdb e crearne uno nuovo non risolve il problema.

Naturalmente ho le informazioni di debug generate e tutto ciò che è necessario, specialmente perché questo accade durante il debug del codice più volte.

Visual Studio sembra essere soddisfatto del pdb in-memory e rifiuta di aggiornarlo, indipendentemente dai timestamp o anche dalle modifiche alle dimensioni del pdb.

L’unico modo per reimpostare ciò è uscire da Visual Studio (l’IDE) e riavviarlo nuovamente.

In alcuni casi rari, l’IDE potrebbe essere ancora in esecuzione in background (Process Explorer lo mostra lì) e potrebbe mantenere l’handle del file aperto. È ansible terminare il processo prima di riavviare l’IDE.

In bocca al lupo

Ho appena riscontrato questo errore in VS2012. È sicuramente causato da un bug in Visual Studio, che si rivela in situazioni in cui il file PDB locale del progetto principale ha lo stesso nome del file PDB finale per l’intero eseguibile (anche se i due si trovano in directory diverse!)

Considera questo esempio.

La soluzione consiste di tre progetti: main , b . main è il progetto di livello più alto per l’eseguibile, mentre b sono librerie collegate in main .

In tutti e tre i progetti la variabile $(IntDir) è impostata su $(SolutionDir)\$(Configuration)\$(ProjectName)\ . Ciò significa che il progetto esegue il dump dei suoi file intermedi in Debug\main\ , project a – in Debug\a\ e così via.

In C/C++ -> Output Files Impostazioni C/C++ -> Output Files , tutti e tre i progetti hanno valore Program Database File Name impostato su $(IntDir)$(TargetName).pdb . Ciò significa che il progetto main genera il suo file PDB locale come Debug\main\main.pdb , project b come Debug\b\b.pdb e così via.

Infine, in Linker -> Debugging Impostazioni di Linker -> Debugging del progetto main il valore del Generate Program Database File $(OutDir)$(TargetName).pdb è impostato su $(OutDir)$(TargetName).pdb . Ciò significa che il file PDB globale per l’intero eseguibile verrà generato come Debug\main.pdb .

Notare che in questa configurazione ogni file PDB viene generato nella propria directory separata.

In questa configurazione si otterrà che le informazioni di debug non possono essere trovate o che non corrispondono all’errore se si tenta di eseguire il programma sotto il debugger. E se dai un’occhiata al file Debug\main.pdb (che esisterà), noterai che è esattamente lo stesso del file Debug\main\main.pdb ! Cioè in qualche modo il PDB locale per main riuscito a sovrascrivere quello che doveva essere il PDB globale per l’eseguibile finale. Cioè il debugger ha ragione a lamentarsi che il file PDB è “sbagliato”. È davvero sbagliato.

Anche in questo caso, il PDB globale finale viene in qualche modo sovrascritto dal PDB locale del progetto principale. Non so perché succede. Sembra un bug. (Si noti che anche se questi file PDB hanno lo stesso nome, vengono generati in directory diverse, ovvero non devono essere in conflitto.)

Una soluzione alternativa che risolve questo problema consiste nel dare al PDB locale del progetto main un nome diverso. Ad esempio, vai su C/C++ -> Output Files per il progetto main e modifica il valore del Program Database File Name su $(IntDir)$(TargetName)_local.pdb (o su $(IntDir)12345.pdb se lo desideri ). Ciò eliminerà il conflitto e risolverà il problema.

Ho affrontato lo stesso problema e ho provato tutte le soluzioni di cui sopra ma non poteva aiutarmi. Poi ho trovato una nuova soluzione a caso e ha funzionato.

La soluzione è che, nel caso in cui tu stia avendo molti progetti in una soluzione, dovresti contrassegnare uno qualsiasi (quello specifico che devi decidere) come “Imposta come progetto di avvio”. Fai clic destro su quel progetto specifico e fai clic su “Imposta come progetto di avvio”.

Ha funzionato per me.

Abilita la creazione del PDB tramite:

Fare clic con il tasto destro su MyProject > Properties > Debugging :

  • C/C++ > General > Debug Information Output = Program Database (/Zi)
  • Linker > Debugging > Generate Debug Info = Yes (/DEBUG)

Pulisci MyProject, riavvia Visual Studio (solo per essere sicuro), ricostruisci MyProject. La cartella di output dovrebbe quindi contenere i file * .pdb.

Se esegui il debug del codice ottimizzato / di rilascio, valuta la possibilità di distriggersre l’ottimizzazione tramite

  • C++ > Optimization > Optmization = Disabled (/Od)

Sembra che manchi il file del database pdb o del programma (in pratica, il percorso è cambiato e non può più essere trovato dal compilatore). Vedi questo post correlato per ulteriori informazioni.

Ho avuto un problema simile e il motivo era che avevo eseguito uno dei progetti della mia soluzione in un processo diverso e quel processo non poteva essere ucciso. Non ci ho pensato molto. Così, quando stavo costruendo la soluzione in un ambiente separato, uno dei file pdb non corrispondeva così alla fine non potevo caricare nessuno dei file pdb. Ho appena riavviato il mio computer e l’ho risolto.

In bocca al lupo

Il riavvio di Visual Studio può risolvere un’istanza di questo problema.

Fai clic con il tasto destro del mouse sul tuo progetto nel browser della soluzione => Clean => Build. Cioè se la tua build genera un file .pdb (guarda nella directory di destinazione) In caso contrario, dovresti abilitare il debug seguendo i passaggi menzionati in altri post

Molto probabilmente ci sono altri motivi come la mancata corrispondenza dei file .pdb / .exe, qualcosa non è stato costruito / ricostruito, ma ho avuto un caso simile in Visual Studio 2013 –

Qualcosa che ha a che fare con la funzione inline virtuale – quindi sospetto.

Nel mio caso il debugger stava saltando nel mezzo di un’altra funzione C ++, non quella che è stata chiamata. Il salto era fuori dal codice sorgente di 11 linee di codice sorgente, ma non so spiegare perché si sia verificato un errore di calcolo. Con semplici funzioni di riorganizzazione mi sono liberato di questo problema.

Potrebbe essere necessaria un’analisi più dettagliata del motivo per cui 11 linee si sono spostate originariamente.

Non ho visto questo tipo di comportamento in nessun altro studio visivo.

Questo problema mi ha infastidito per molto tempo. L’anser di AnT è molto utile. L’idea principale è Non avere due file pdb con lo stesso nome , anche se non si trovano nella stessa directory.

Questa è la mia situazione: ho progetti di traino denominati “FooBar” e “FooBarDll”, il primo è un exe e il secondo è una dll. Ho impostato su entrambi i progetti Target Name come “FooBar”, in modo che generino rispettivamente “FooBar.exe” e “FooBar.dll”.

Quindi ho impostato

  1. “Generale -> Directory Intermedia” deve essere “$ (OutDir) \ $ (NomeProgetto) \”
  2. “C / C ++ -> File di output -> Nome file database programma” da “$ (IntDir) $ (TargetName) .pdb”
  3. “Linker -> Debugging -> Genera file database programma” per essere “$ (OutDir) $ (TargetName) .pdb”

Quindi ottengo questi file:

  1. Debug \ FooBar.exe
  2. Debug \ FooBar.pdb // C ++ pdb
  3. Debug \ FooBar \ FooBar.pdb // Linker pdb

  4. Debug \ FooBar.dll

  5. Debug \ FooBar.pdb // C ++ pdb ancora!
  6. Debug \ FooBarDll \ FooBar.pdb // Linker pdb

La mia soluzione sta sostituendo ogni “TargetName” con “ProjectName”, quindi otterrò:

  1. Debug \ FooBar.exe
  2. Debug \ FooBar.pdb // C ++ pdb
  3. Debug \ FooBar \ FooBar.pdb // Linker pdb

  4. Debug \ FooBar.dll

  5. Debug \ FooBarDll.pdb // C ++ pdb
  6. Debug \ FooBarDll \ FooBarDll.pdb // Linker pdb

Quindi non c’è conflitto!

Dare a C / C ++ pdb un suffisso può essere migliore, come: “C / C ++ -> File di output -> Nome file database programma” da essere “$ (IntDir) $ (Nome progetto) _C.pdb”

Ho avuto lo stesso problema e questo collegamento mi ha aiutato a risolvere il problema, rinominando “symsrv.no” in “symsrv.yes” nella cartella VS IDE.

Curioso, mi è successo che dovevo cambiare il nome della cartella da:

 ...\Custom Librarry (MyDll.dll( 

a

 ...\Custom Librarry (MyDll.dll) 

solo chiudendo la parentesi ha funzionato!