How to allocate an input file instead of the stdin

2019-08-29 15:15发布

问题:

My application is a simple executable used from the command line and takes stdin as input and stdout as output, so it behaves like many GNU tools. To test it, I want to set up an Eclipse CDT DEBUG Configuration to pass a file to stdin and another one to stdout.

I have tried unsuccessfully a few solutions, all inside the DEBUG Configuration GUI :

  1. In Common / Standard Input and Output / Input File: I put inputfile.txt and in the same section Output file: I put outputfile.txt. As the GUI indicates that the working directory is ${workspace_loc:/myprogram}, it should be alright, but when the debugger is started, it warns :

[Invalid file specified for console output: test/WittenACM87ArithmCoding-1.txt.coded] [Invalid file specified for stdin file: test/WittenACM87ArithmCoding-1.txt]

  1. In Arguments I put < inputfile.txt > outputfile.txt which is obviously not designed for that

Of course, both files are in the working directory. All attempts fails on the ch = getc(stdin); code line with some strange message:

Can't find a source file at "/build/glibc-p3Km7c/glibc-2.24/io/../sysdeps/unix/syscall-template.S" Locate the file or edit the source lookup path to include its location.

Here is the stack:

Thread #1 [myprogram] 31960 [core: 5] (Suspended : Signal : SIGINT:Interrupt)
__read_nocancel() at /build/glibc-p3Km7c/glibc-2.24/io/../sysdeps/unix/syscall-template.S:84 0x7ffff7811700 _IO_new_file_underflow() at /build/glibc-p3Km7c/glibc-2.24/libio/fileops.c:600 0x7ffff77a9a00
__GI__IO_default_uflow() at /build/glibc-p3Km7c/glibc-2.24/libio/genops.c:413 0x7ffff77aab02
_IO_getc() at /build/glibc-p3Km7c/glibc-2.24/libio/getc.c:38 0x7ffff77a54f0 main() at /xxxxxx/src/myprogram.c:20 0x555555554f01

When I run the application directly in the console, it works:

./myprogram < inputfile.txt > outputfile.txt

I assume from this that Eclipse does not manage to realise the files redirections to stdin and stdout, so obviously, I do it the wrong way. I have searched for it, but here and here don't provide solution for my use case.

So, in order to be able to use the debugger from Eclipse, what is the right way to set up the Eclipse DEBUG Configuration ?

回答1:

In fact, solution 1 was using a relative path not related to the working directory. Using either button Workspace... or File System... in the GUI enables to select the files which shall already exist.

For example with Workspace definition, the field becomes :

${workspace_loc:/myprogram/inputfile.txt} (same for output)

And it works. Debuggers says :

[Console output redirected to file:/.../myprogram/outputfile.txt]