2009-09-03 9 views
9

Ho un progetto per Mac OS X 10.5 che sto sviluppando su 10.6 utilizzando Xcode 3.2. Quando utilizzo GCC 4.2 per il debug build e colpisco un breakpoint, il debugger Xcode visualizza normalmente le informazioni sulle variabili locali. Se scelgo LLVM GCC 4.2 o Clang LLVM, quando raggiungo il punto di interruzione, i simboli locali non sono disponibili e GDB dice Nessun simbolo 'self' nel contesto corrente se provo a stampare auto o qualsiasi altro simbolo locale. In tutti i casi l'opzione Genera informazioni di debug è impostata. La configurazione di Debug è impostata su $(NATIVE_ARCH) e 10.5 SDK, Crea solo architettura attiva è impostata l'opzione. All'avvio di GDB, posso vedere che è configurato come x86_64-apple-darwin. Devo mancare qualcosa di ovvio. Come faccio a mostrare a GDB simboli locali quando si utilizza un compilatore LLVM?Xcode 3.2 + LLVM = nessun simbolo locale durante il debug

risposta

9

Per chi non lo conoscesse, un po 'più di dettaglio alla risposta di cdespinosa, che ha funzionato per me, e che ho votato.

  1. Dal menu Xcode, selezionare Progetto> Modifica Impostazioni progetto ...
  2. Scegliere la scheda Costruisci
  3. Nella casella di ricerca "livello di ottimizzazione", scegliere quel campo, e selezionare Nessuno.
  4. La ricerca successiva di "Formato informazioni di debug", selezionare quel campo e selezionare "DWARF" o "DWARF con dSYM".

Avrebbe messo questo nei commenti al suo post se avessi i privilegi. ;)

Questo mi è costato un po 'di tempo, ed è stato francamente un po' sciatto da parte di Apple, ma in generale non posso lamentarmi.

0

GDB da FSF ha aggiunto solo il supporto per il codice JIT molto recently.

Non so se il GDB fornito da Apple ne abbia il supporto (ottieni tracce di stack ragionevoli?). Se lo fa, questo supporto è (apparentemente) incompleto.

+0

Cosa ti fa pensare che questo abbia qualcosa a che fare con JIT, o che Apple spedirebbe un gdb che non funziona completamente con il compilatore che hanno scritto? – user57368

+0

Lo stack sembra corretto, mostra tutte le mie funzioni. Sono le vars locali che mancano. – glebd

+0

Ma llvm può generare codice nativo, non bytecode. – osgx

4

Questo può aiutare. Prova a disattivare "Link-Time Optimization" nelle opzioni di creazione del progetto. Questo ha risolto un problema che avevo con i simboli di debug mancanti.

In effetti, questo ha risolto un sacco di strani problemi che stavo avendo con Clang. Direi che la funzione è troppo all'avanguardia per essere utilizzata ancora.

5

Assicurati di costruire con simboli Dwarf e nessuna ottimizzazione. llvm è un nuovo back-end, e non tutti i suoi codegen ottimizzati sono collegati per il debug di generazione di simboli ancora.

0

Avevo questo problema e l'ho risolto mettendo un segno di spunta accanto alla voce di menu: "Progetto> Imposta configurazione build attiva> Debug". In precedenza, l'opzione "Rilascio" era selezionata. Da quel momento in poi i locali hanno iniziato a comparire nel debugger per il mio progetto.