我喜欢 nemiver 的想法,但我无法让 nemiver 的这个基本功能起作用:将标准输入重定向到程序。所以我的程序需要文件输入而不是手动输入,它通常采用以下形式:
./program < list.txt
但显然,nemiver 无法识别这种简单的重定向。并将“<”和“list.txt”视为单独的参数。这让我非常沮丧。有针对这个的解决方法吗?非常感谢你们!
如果您只想进行事后分析(并且不需要单步),您可以加载一个崩溃转储(核心)文件,该文件可以在任何类型的流水线/重定向场景下生成。
( ulimit -c unlimited && ./yourapp <in.txt >out.txt ) || nemiver --load-core=core ./yourapp
这仅在发生崩溃或断言时启动调试器。
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>