포크를 사용하여 다른 프로세스를 만들고 거의 즉시 execv를 실행 파일에 호출하는 프로그램이 있습니다. 자식 프로세스에서 메모리 누수가 있는지 확인하려고합니다. 주 프로세스가 많은 다른 실행 파일을 시작하고 더 많은 스크립트 (--trace-children 옵션을 사용하기에는 추적하기가 너무 어렵습니다)를 실행하기 때문에 execv를 사용하여 주 프로세스 내부에서 valgrind를 호출하고 인수로 실행할 수 있습니다.valgrind를 실행하는 동안 오류가 발생했습니다.
내 코드는 이런 식입니다 -
memleak 내가 누출을 검사 할 프로그램입니다#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main()
{
char tool[30], logpath[30], executable[30], exepath[30];
char *arguments[5];
strcpy(tool, "--leak-check=full");
strcpy(logpath, "--log-file=valrep.txt");
strcpy(executable, "./memleak");
strcpy(exepath, "/usr/bin/valgrind");
arguments[0] = exepath;
arguments[1] = tool;
arguments[2] = logpath;
arguments[3] = exepath;
execv("/usr/bin/valgrind", arguments);
return 0;
}
. 하지만이 프로그램을 실행하면이 오류가 발생합니다.
Running valgrind using the tool: --leak-check=full.
The report is stored in: --log-file=valrep.txt.
valgrind: You cannot run '/usr/bin/valgrind' directly.
valgrind: You should use $prefix/bin/valgrind.
나는 봤지만 이유를 찾을 수 없었다. 도와주세요!
당신이'arguments' 배열을 설정하는 방법에 대해 자세히 살펴 보자. 그런 다음 배열이 null 포인터로 끝나야한다는 것을 기억해야합니다. –
[execve 및 설정 환경 변수에 대한 이해 요구 사항]의 가능한 중복 (http://stackoverflow.com/questions/7656549/understanding-requirements-for-execve-and-setting-environment-vars) – jww