2012-01-27 19 views
12

Sembra che il reindirizzamento ingresso in gdb non funziona in Cygwin per esempioredirezione dell'input gdb con Cygwin

(gdb) run < input.txt 

C'è altro modo per reindirizzare ingresso in gdb di Cygwin ??

+3

Questa è una limitazione di Cygwin, c'è diversi espedienti per questo, si possono provare le soluzioni di questo problema correlato: http://stackoverflow.com/questions/3544325/input-redirection-in-gdb-mingw – speedblue

risposta

12

Purtroppo questo non è possibile quando si esegue gdb in cygwin. Il bug esiste per una citazione da molto tempo, ma a quanto pare è difficile da correggere - e probabilmente gli sviluppatori di gdb preferiscono passare il tempo su funzionalità/problemi rilevanti per ambienti più comuni (come Linux).

Esistono varie soluzioni possibili; Preferirei il primo dato che è il più pulito e utile anche quando non eseguo il debug/running su cygwin:

  • Aggiungi un argomento della riga di comando, ad es. -f whatever con whatever è il nome del file da cui leggere. Se l'argomento non è presente o impostato su -, leggi da stdin. L'opzione -f - è ovviamente facoltativa, ma per gli argomenti che accettano i nomi di file è uno standard comune (purché abbia senso) per gestire - come "usa stdin/out".
  • Utilizzare l'hack gdb menzionato here per riassociare stdin ad un file aperto manualmente all'interno dell'applicazione:

    > gdb yourexecutable 
    (gdb) break main 
    (gdb) run 
    (gdb) call dup2(open("input.txt", 0), 0) 
    (gdb) continue 
    

    Questo imposta un punto di interruzione sulla funzione main, poi esegue il programma che romperà destra dopo aver inserito main. Quindi lo dup2 viene utilizzato per sostituire lo stdin fd (0) con un descrittore di file del file di input.