У меня есть программа, которая создает другой процесс с использованием вилки и почти сразу вызывает execv в исполняемом файле. Я хочу проверить утечку памяти на дочерний процесс. Поскольку основной процесс запускает множество других исполняемых файлов и запускает еще много скриптов (которые слишком сложно отслеживать для использования опции -trace-children), я хочу вызвать valgrind изнутри основного процесса с помощью execv и передать исполняемый как аргумент.Ошибка во время работы valgrind
Мой код выглядит примерно так -
#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;
}
Где memleak это программа, которую я хочу, чтобы проверить на наличие утечек. Но когда я запускаю эту программу, я получаю эту ошибку.
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' массив. Тогда вам нужно помнить, что массив должен быть завершен нулевым указателем. –
Возможный дубликат [понимания требований для execve и настроек среды vars] (http://stackoverflow.com/questions/7656549/understanding-requirements-for-execve-and-setting-environment-vars) – jww