IIRC, Valgrind должен выполнить приложение, потому что оно изменяет символы только для чтения, чтобы заменить общие библиотечные функции, такие как malloc
и т. Д.
Это означает, что вы не можете присоединить memcheck к уже запущенному процессу, потому что он не может изменить этот раздел программы в памяти (и это, вероятно, повредит состояние выполнения).
Возможно, есть и другие причины. quick google предполагает, что вы не можете прикрепить memcheck и к запущенному процессу. Как и предполагалось, вы можете обернуть свои исполняемые файлы в скрипт bash, например. Поэтому, если программа myprog
создает новые процессы newprog
, выполните:
]$ mv /path/to/myprog /path/to/newprog
тогда
#!/bin/bash
valgrind (options) /path/to/newprog $@
и назовите его myprog
$@
гарантирует передачу аргументов. Затем, когда ваша программа создаст новый процесс, используя myprog -a b -c d
, он будет заключен в valgrind.
Это относится только к определенным вызовам C, таким как execve()
и другим, тогда как другие непонятные способы создания процессов могут не использовать преимущества упаковки.
Если я ошибаюсь, было бы неплохо знать:)