2011-02-11 2 views
4

valgrind로 C++ 프로그램을 실행하려고하지만 프로그램에서 stdin에서 사용자 입력이 필요한 몇 가지 사항이 있지만 valgrind로 실행하면 사용자가 프로그램에 대해 아무 것도 입력하지 않으면이 문제가 해결 될 수 있습니까?C++에서 필요로 할 때 valgrind가 사용자 입력을 읽을 수있게 만들기

주위를 검색했지만 답변을 찾지 못했습니다.

+0

valgrind가 의미하는 바를 확장해야 사용자가 아무 것도 입력 할 수 없습니다. valgrind를 사용하여 stdin을 여러 번 읽는 프로그램을 디버깅했습니다. –

+0

내 프로그램을 시작하고 시작할 때 사용자 입력이 필요합니다 (표준 입력으로 숫자 입력). 콘솔에 일부 텍스트가 출력됩니다 ... 텍스트가 표시되지 않고 입력을 입력 할 수 없습니다. valgrind와 함께 실행할 때 콘솔 ... – Daniel

+0

@Daneil은 이것을 작은 재생기로 끓여서 여기에 코드를 게시합니다. 대형 응용 프로그램을 디버깅 할 때에도 그 동작을 보지 못합니다. –

답변

2

나는 그것을 시도하지 않은,하지만 난 그 사람 페이지에서 이걸 발견 :

당신이 (말 3) 다른 FD를 지정 Valgrind의의 입력에 사용하면 어떻게됩니까
--input-fd=<number> [default: 0, stdin] 
       Specify the file descriptor to use for reading input from the 
       user. This is used whenever valgrind needs to prompt the user 
       for a decision. 

?

+0

나는 아무것도 시도하지 않았지만 valgrind가 실행 중일 때도 화면에 어떤 출력도 표시되지 않는다는 것을 언급해야합니다. – Daniel

+0

@Daniel :이 내용을 읽고 이것이 문제인지 확인하십시오. http://www.freelists.org/post/programmingblind/Solved-Problem-using-valgrind –

+0

그가 출력을 다른 콘솔로 리디렉션하고 있다고 생각합니다. 환경에서 불행하게도 나는 그것을 할 permitions이 없습니다. 다른 방법은 없습니까? – Daniel

1

다음은 cgi 프로그램 (./myexe)이 stdin에서 읽는 Linux 예제입니다. 입력을 파일 mystdin에 저장합니다. 따라서 valgrind는 터미널에서 입력을 읽을 수 있습니다. --input-fd = 3을 수행하고 쉘에게/dev/tty를 파일 설명자 3으로 리디렉션하도록 지시합니다. gdb를 제어 할 수 있도록/dev에서 stdin의 리디렉션을 추가합니다/tty는 valgrind에 대한 --db-command 매개 변수에 있습니다. 이것은 아마도 더 나쁜 경우입니다. 희망이 도움이됩니다.

valgrind --input-fd=3 --db-command='gdb -nw %f %p < /dev/tty' --db-attach=yes ./myexe < mystdin 3</dev/tty