2013-04-07 6 views
2

Мне нравится идея nemiver, но я не могу заставить эту основную функцию nemiver работать: перенаправить стандартный ввод в программу. так мои потребности программы файл ввода вместо ручного ввода, он обычно принимает форму:Nemiver - Невозможно направить стандартный ввод

./program < list.txt 

, но, по-видимому, nemiver не признает эту простую переадресацию. и считает «<» и «list.txt» отдельными аргументами. это сильно меня разочаровывает. Есть ли этому решение? Спасибо вам, ребята!

+0

связанный: [Перенаправление ввода в gdb (MinGW)] (http://stackoverflow.com/questions/3544325/input-redirection-in-gdb-mingw) – nobar

+1

kdbg поддерживает перенаправление. К сожалению, [kdbg is DOA] (https://bugs.launchpad.net/ubuntu/+source/kdbg/+bug/1072300) в последних выпусках Ubuntu. – nobar

+0

kdbg исправлено в Ubuntu 13.10! – nobar

ответ

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> 
0

Если вы просто хотите, чтобы сделать посмертный анализ (и не нужно пошагового), вы можете загрузить краш-дамп (ядро) файл, который может быть сгенерирован при любом сценарии конвейерной обработки/перенаправления.

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

Это только запускает отладчик, если происходит сбой или утверждение.

Смежные вопросы