2012-10-15 9 views
9

La mia applicazione non è vedere il codice sorgente di una libreria:Nessun simbolo/sorgente di libreria esterna in Xcode 4

  • Se io "Vai a definizione" su un metodo di biblioteca, XCode mi porta al file h ma dice che non c'è alcuna controparte cpp
  • quando il debug, non vedo il codice sorgente e la maggior parte della chiamata stack è presente per la libreria: enter image description here
  • mi sono assicurato "Mostra smontaggio in fase di debug" è selezionata

Ho costruito la libreria come DEBUG e poi ho inserito le intestazioni + un file in una directory SDK. Quindi credo che sia necessario copiare i file di debug in quella directory SDK, o dire alla mia applicazione dove cercare. Non sono sicuro di come fare neanche.

Per chiarire, il mio progetto di applicazione non mantiene un riferimento al progetto di libreria, solo per i file .a e le dir di intestazione. Questo perché il progetto di libreria è creato da CMake e non voglio modificarlo.

+0

Era la biblioteca compilato sulla macchina su cui si sta eseguendo il debug? I file di origine sono nella stessa posizione in cui si trovavano quando la libreria è stata compilata con le informazioni di debug? Quali flag di debug hai fornito al compilatore quando si creava la libreria? –

+0

Sì, è stato compilato sullo stesso Mac ma indipendentemente, io basta dire al progetto dell'applicazione dove sono .a e le intestazioni. I file .cpp di origine non vengono spostati, ma ho spostato le intestazioni e il file .a per creare un SDK; ci sono percorsi assoluti o qualcosa del genere? Dove e in che modo Xcode memorizza tali informazioni? –

+0

Hai mai risolto questo? Ho una domanda simile qui: http://stackoverflow.com/questions/18903782/how-to-match-precompiled-static-librarys-debugging-symbols-to-source-code-with?lq=1 –

risposta

8

Prima di tutto, è necessario controllare la sezione .debug_str della libreria statica per verificare che contenga le informazioni di debug appropriate.

provare a eseguire questo comando sul terminale:

xcrun dwarfdump /path/to/library.a | grep "\.m" 

si dovrebbe vedere un mucchio di sorgente percorsi di file (.m) stampati. In teoria, questo è il punto in cui Xcode guarderà quando ti fermerai nel debugger, quindi assicurati che i percorsi qui siano corretti. Se non visualizzi alcun percorso, dovrai passare un opportuno debug flag (ad esempio -g al compilatore quando crei la tua libreria.

Se i percorsi sono in qualche modo errati o vuoi indirizzarli in qualche altra posizione , potresti essere in grado di modificarli come parte del processo di compilazione in CMake, ad esempio per renderli relativi alla directory del tuo progetto Prova a guardare "Make gcc put relative filenames in debug information", che usa CMake per regolare questi percorsi di debug.

+0

FYI questo è un'applicazione C++ ma presumo di aver appena sostituito .m per .cpp i la tua risposta? –

+0

Non ottengo alcun output quando lo eseguo con "\ .m" o "\ .cpp". Puoi ricontrollare che è corretto? Il mio debug lib è 650Mb rispetto a quello di rilascio a 30Mb quindi sono abbastanza sicuro che sia stato costruito come debug! –

+0

Qualche progresso su questa domanda? Sto riscontrando un problema simile qui: http://stackoverflow.com/questions/18903782/how-to-match-precompiled-static-librarys-debugging-symbols-to-source-code-with?lq=1 –