GDB + Programm + Pipes

#3343368
Lesenswert?

Hallo zusammen,

ich lese in meinem C-Programm per scanf eine Reihe von Daten ein. Damit 
ich das nicht immer von Hand machen muss habe ich die Daten in eine 
Text-Datei geschrieben und rufe das Programm mit einer Pipe auf:
1
more prog.exe | input.txt

Frage: kann ich diese Funktionalität mit dem GNU Debugger verbinden?

Gruß Dennis
#3343571
Lesenswert?

Rolf Magnus schrieb:
>
1
> gdb prog.exe
2
> run < input.txt
3
>

Hmm... das funktioniert nicht so wie ich mir das vostelle. GDB (Version 
7.5) sagt zwar
"Reading symbols .... done." und
"Starting program: prog.exe < input.txt",
danach passiert aber nichts mehr (auch nach Eingabe von continue nicht). 
Gebe ich stattdessen die Daten manuell ein, geht alles wie gehabt.

Noch jemand eine Idee?
#3343615
Lesenswert?

Jörg Wunsch schrieb:
> Wenn "nichts mehr passiert", wie willst du dann "continue" eingeben?
Naja.... nach den zwei Befehlen warte ich. Es kommt keine Ausgabe, wie 
es eigentlich geschehen müsste (bei Aufruf ohne GDB). Ich kann aber 
Befehle eintippen, zum Beispiel "continue", "next", ... Wenn ich das 
mache kommt immer noch keine Ausgabe.

> Wenn wirklich nichts mehr passiert, solltest du mit ^C einen Interrupt
> senden können und dann sehen, an welcher Stelle das Programm jetzt
> ist.

Das habe ich ausprobiert:
1
gdb prog.exe
2
run < input.txt
3
STRG+C

Dann kommt die Ausgabe:
1
Program received signal SIGINT, Interrupt.
2
[...]
3
error detected on stdin

Es scheint wohl doch nicht möglich zu sein!?
Moderator Persönliche Seite #3343627
Lesenswert?

Dennis S. schrieb:
> Es scheint wohl doch nicht möglich zu sein!?

Kann sein.  Entweder ein Problem von GDB unter Windows generell,
oder eins speziell mit deinem Build.  Habe es gerade unter Unix
probiert:
1
$ cat lc.c
2
#include <stdio.h>
3

4
int
5
main(void)
6
{
7
        int cnt = 0;
8
        char b[100];
9

10
        while (fgets(b, 100, stdin) != NULL)
11
                cnt++;
12

13
        printf("Count: %d\n", cnt);
14

15
        return 0;
16
}
17
$ cc -O -o lc -g lc.c
18
$ gdb lc
19
GNU gdb (GDB) 7.6 [GDB v7.6 for FreeBSD]
20
Copyright (C) 2013 Free Software Foundation, Inc.
21
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
22
This is free software: you are free to change and redistribute it.
23
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
24
and "show warranty" for details.
25
This GDB was configured as "i386-portbld-freebsd8.2".
26
For bug reporting instructions, please see:
27
<http://www.gnu.org/software/gdb/bugs/>...
28
Reading symbols from /tmp/lc...done.
29
(gdb) run < /usr/share/dict/words
30
Starting program: /tmp/lc < /usr/share/dict/words
31
Count: 235923
32
[Inferior 1 (process 84800) exited normally]
33
(gdb) quit
Gast #3343628
Lesenswert?

Hmm, bei mir funktioniert das so.

Dennis S. schrieb:
> Dann kommt die Ausgabe:Program received signal SIGINT, Interrupt.
> [...]
> error detected on stdin

Offenbar wartet dein Programm auf irgendwas. Tipp doch mal bt ein, um zu 
sehen, wo das Programm stehen geblieben ist. Vielleicht gibt das 
Aufschluss.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren