2010-08-23 13 views
18

Sto provando a ottenere gdb per eseguire programmi con redirezione di input su stdin. Ad esempio, senza gdb vorrei correre un programma come questo:Reindirizzamento dell'input in gdb (MinGW)

prog < input.txt 

Ora in gdb, il solito modo per fare questo è run < input.txt. Tuttavia, non funziona per me e quando lo faccio niente viene reindirizzato in stdin.

Sto usando Windows con MinGW. Quale potrebbe essere il problema?

risposta

2

Mi sono imbattuto nello stesso problema qui, e ho preso l'abitudine di aggiungere un argomento della riga di comando per consentire l'inserimento di input da un file.

ad es. Analizzando un argomento "-i ifile" usando argc e argv per ottenere input da ifile invece di stdin e analizzare un "-o ofile" per scrivere output su ofile invece di stdout.

Quindi uso solo quegli argomenti anziché i reindirizzamenti.

Gli strumenti forniti con MinGW spesso non sono le versioni più recenti e spesso hanno omesse funzioni. :: shrug ::

12

Fin dalla fine degli anni '90, il reindirizzamento della linea di comando interrotto era un known and assumed limitation. Il mio sospetto è che rimanga così, dal momento che la porta mingw32 di gdb passa ancora allegramente tutti gli argomenti run (inclusi i reindirizzamenti) al debugger.

Diverse possibili soluzioni:

  1. se avete la possibilità di modificare l'interfaccia a riga di comando, quindi implementare il suggerimento s' bbadour
  2. altrimenti, se si può facilmente sospendere il processo prima del punto che si desidera eseguire il debug a, richiamare il debugee (con reindirizzamento) da una shell ed allegare alla stessa, mentre è già in esecuzione
  3. in caso contrario, se si dispone di simboli per il debugee (gcc -g) o si conosce l'indirizzo di main() (gcc -Wl,-Map,mapfile) e può impostare un punto di interruzione lì, procedere nel seguente modo (testato con mingw gdb 6.8.0):

    # gdb debugee.exe 
    (gdb) b main 
    (gdb) run non-redirect-arguments-if-any 
    (gdb) p dup2(open("/tmp/input.txt", 0), 0) 
    (gdb) c 
    
+0

sto correndo nello stesso problema come OP. Tuttavia, non sono in grado di far funzionare la terza soluzione per me. Questo è su 'gdb 7.5.50'. Come funziona la seconda soluzione? Come ci si assicura che all'avvio del debug non si esegua solo il completamento prima che si abbia la possibilità di collegare gdb ad esso? – greatwolf