2013-09-29 17 views
10

Domanda in fondo: è possibile che Xcode attenda il lancio di un'applicazione, quindi avvia l'applicazione dall'esterno di Xcode, quindi Xcode si ferma in corrispondenza di un punto di interruzione?Xcode debug dei punti di interruzione all'avvio dell'app da Xcode

descrizione --detailed below--

desidero debug (passo attraverso la linea per linea) un semplice programma C che richiede testo da convogliato per stdin utilizzando Xcode 4.6.3 su 10.8. 5.

Per fare così ho bisogno di avviare il programma come questo $ cat in.txt | ./mysimpleprogram> out.txt e il debugger Xcode si ferma a un punto di interruzione.

Ho seguito le istruzioni che ho trovato in questa risposta https://stackoverflow.com/a/13006633/2779792 ma Xcode non si ferma ai punti di interruzione.

di riprodurre il problema

  1. Aprire Xcode 4.6.3

  2. Nella schermata "Benvenuti in Xcode" scegliere "Creare un nuovo progetto Xcode"

  3. In "Scegliere un modello per il nuovo progetto "schermo scegli Mac OS X -> Applicazione -> Strumento riga di comando quindi fai clic su Avanti

  4. Nella" C opzioni di hoose per il tuo nuovo progetto: "schermo Nome prodotto: HelloWorld, Tipo: C -> Avanti, Usa conteggio riferimento automatico = Falso

  5. Scegliere un percorso per il progetto.

Nota: Nelle preferenze Xcode -> Locali -> dati derivati, ho selezionato "relativo"

  1. Vai al menu del prodotto -> Scheme -> Modifica Schema

  2. Sul lato sinistro della finestra Modifica schema, selezionata per impostazione predefinita è "Esegui HelloWorld Debug". Sul lato destro della finestra Modifica schema ho modificato il pulsante di opzione Avvia automaticamente per "Attendere il lancio di HelloWorld". Debugger = LLDB, Debug Process As = me

  3. Impostare uno o più punti di interruzione nel codice.

  4. Selezionare Prodotto -> Esegui (o fare clic sul pulsante Riproduci). Ora la finestra principale di Xcode dice "Waiting for HelloWorld to launch".

  5. Aprire una finestra di terminale e passare alla eseguibile HelloWorld, nel mio caso .../HelloWorld/DerivedData/HelloWorld/costruire/Prodotti/Debug/

  6. eseguire il programma con il comando ./HelloWord

Il programma esegue e stampa Hello, World! come previsto, Xcode dice "Finito di eseguire HelloWorld: HelloWorld". Non si è fermato in nessuno dei punti di interruzione.

Comportamento desiderato, Xcode deve fermarsi ai punti di interruzione e consentirmi di scorrere il codice.

Grazie per qualsiasi aiuto o suggerimento.

+0

Hai provato 'Debugger-> Attach to Process'? – BergQuester

+0

Per il tuo suggerimento Ho provato alcune varianti di apertura di un terminale e selezionando Prodotto -> Collega a Processo -> Terminale. Ancora non si ferma ai punti di interruzione. "Terminale" è il processo corretto da allegare a? Ovviamente HelloWorld non è un processo disponibile nell'elenco e HelloWorld sarebbe presente nell'elenco solo per un microsecondo una volta avviato. –

risposta

11

Nel tempo impiegato dal debugger per rilevare e allegare al processo, l'esecuzione del processo è passata oltre i punti di interruzione. Per ottenere un comportamento deterministico dal debugger in questa configurazione, è necessario sospendere l'esecuzione del processo prima del primo punto di interruzione e attendere il collegamento del debugger. Un modo semplice per farlo è con l'aggiunta di codice per inviare il segnale di STOP:

raise(SIGSTOP); 

L'esecuzione si fermerà a questo punto e il debugger continuerà automaticamente quando attacca.

+0

Questo sembra promettente. Tuttavia ottengo questi: la dichiarazione implicita della funzione 'raise' non è valida in C99 e l'uso dell'identificatore non dichiarato 'SIGSTOP' –

+0

È necessario '#include '. –

+0

Fantastico. Questo funziona. Ho molto da imparare. –

Problemi correlati