我如何在需要超级用户权限的程序上 运行 Valgrind?
How do I run Valgrind on a program that needs superuser permission?
我正在用 C 编写一个数据包嗅探器(使用 libpcap),我不能使用 Valgrind 来查找我程序中的内存泄漏,因为它必须 运行 具有超级用户权限,因为,如果没有这个,我什至无法打开网络接口进行捕获。
当我尝试 运行 Valgrind 与 sudo
时,我得到了这个:
$ valgrind sudo ./[exec]
==5211==
==5211== Warning: Can't execute setuid/setgid/setcap executable: /usr/bin/sudo
==5211== Possible workaround: remove --trace-children=yes, if in effect
==5211==
valgrind: /usr/bin/sudo: Permission denied
所以我尝试以超级用户身份 运行 (sudo su
) 并得到了这个:
# valgrind ./[exec]
valgrind: ./bin/TP2: Permission denied
以及:
$ sudo valgrind ./[exec]
valgrind: ./bin/TP2: Permission denied
我搜索了整个 Internet 以找到答案。
简而言之,我需要在我的数据包嗅探器中找到内存泄漏,并且它必须 运行 具有管理员权限。有人可以帮我解决这个问题,或者至少向我推荐另一个内存检查器吗?
我找到了解决办法。我不知道这个问题是因为我的可执行文件所在的卷是一个 NTFS 分区。首先,我将文件移动到 Ex4 分区上的一个随机文件夹,因此,我使用 chmod
.
更改了我的可执行文件的权限
现在我可以 运行 以 root 身份登录时在我的程序上使用 Valgrind。
我正在用 C 编写一个数据包嗅探器(使用 libpcap),我不能使用 Valgrind 来查找我程序中的内存泄漏,因为它必须 运行 具有超级用户权限,因为,如果没有这个,我什至无法打开网络接口进行捕获。
当我尝试 运行 Valgrind 与 sudo
时,我得到了这个:
$ valgrind sudo ./[exec]
==5211==
==5211== Warning: Can't execute setuid/setgid/setcap executable: /usr/bin/sudo
==5211== Possible workaround: remove --trace-children=yes, if in effect
==5211==
valgrind: /usr/bin/sudo: Permission denied
所以我尝试以超级用户身份 运行 (sudo su
) 并得到了这个:
# valgrind ./[exec]
valgrind: ./bin/TP2: Permission denied
以及:
$ sudo valgrind ./[exec]
valgrind: ./bin/TP2: Permission denied
我搜索了整个 Internet 以找到答案。
简而言之,我需要在我的数据包嗅探器中找到内存泄漏,并且它必须 运行 具有管理员权限。有人可以帮我解决这个问题,或者至少向我推荐另一个内存检查器吗?
我找到了解决办法。我不知道这个问题是因为我的可执行文件所在的卷是一个 NTFS 分区。首先,我将文件移动到 Ex4 分区上的一个随机文件夹,因此,我使用 chmod
.
现在我可以 运行 以 root 身份登录时在我的程序上使用 Valgrind。