Nemiver - 无法指导标准输入

时间:2013-04-07 19:07:21

标签: debugging redirect input

我喜欢nemiver的想法,但我不能让nemiver的这个基本功能工作:将标准输入重定向到程序。因此我的程序需要文件输入而不是手动输入,它通常采用以下形式:

./program < list.txt

但显然,nemiver无法识别这种简单的重定向。并思考&#34;&lt;&#34;和&#34; list.txt&#34;作为单独的论点。这让我非常沮丧。这个问题有方法解决吗?非常感谢你们!

2 个答案:

答案 0 :(得分:0)

作为一种快速而肮脏的解决方案,您可以在main()的开头添加以下内容......

    {
 // programmatically redirect stdio
    const char * stdin_filename="input.txt", * stdout_filename="output.txt";
    assert( dup2(open(stdin_filename ,O_RDONLY),0) != -1 );
    assert( dup2(open(stdout_filename,O_WRONLY),1) != -1 );
    asm(" int3"); // optional breakpoint -- kills program when not debugging
    }

请确保在不调试时禁用此功能(因为在这种情况下,您可能希望使用常规的重定向方法)。

您还需要以下内容......

#include <unistd.h>
#include <fcntl.h>

答案 1 :(得分:0)

如果您只想进行事后分析(并且不需要单步执行),则可以加载崩溃转储(核心)文件,该文件可以在任何类型的流水线操作/重定向方案下生成。

( ulimit -c unlimited && ./yourapp <in.txt >out.txt ) || nemiver --load-core=core ./yourapp

这只会在发生崩溃或断言时启动调试器。