Valgrind 显示错误调用 pr_set_ptracer,vgdb 可能会阻塞
Valgrind showing error calling pr_set_ptracer, vgdb might block
我正在使用 Valgrind 来查找我的 C 程序的内存泄漏,虽然它看起来 运行 很好并且显示了分配和释放的内存。但是,我想知道它为什么会抛出这个错误,它的后果是什么。
这里是错误片段:
==483== Memcheck, a memory error detector
==483== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==483== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==483== Command: ./main ../old\ projects
==483==
==483== error calling PR_SET_PTRACER, vgdb might block
vgdb 可执行文件(valgrind 的一部分)用于 'connect' valgrind
启动监视器命令或在 gdb 和你的之间创建 link
在 valgrind 下处理 运行。
如果您的进程在系统调用中被阻塞,vgdb 需要 'wake up' 您的进程
为此必须能够 'ptrace' 您的流程。
根据系统上安全配置的方式,valgrind
可能必须告诉内核 ptrace 本身没问题。
这是使用系统调用 prctl (PR_SET_PTRACER) 完成的。
如果此系统调用失败,您会看到此消息。
结果是 vgdb 无法连接到您的进程,只要
因为您的进程在系统调用中被阻止。
因此,除非您迫切需要在阻塞时调试您的进程
一个系统调用,或者在系统调用中被阻止时启动一个监视器命令,有
没有后果。
然而,此错误不是预期的。
所以,请在 valgrind bugzilla 上报告错误。
附上输出:cat /proc/sys/kernel/yama/ptrace_scope
另外,如果你可以使用 strace -f valgrind 就好了
并提取系统调用 prctl (PR_SET_PTRACER) 失败的原因
(特别是 errno)。
我正在使用 Valgrind 来查找我的 C 程序的内存泄漏,虽然它看起来 运行 很好并且显示了分配和释放的内存。但是,我想知道它为什么会抛出这个错误,它的后果是什么。
这里是错误片段:
==483== Memcheck, a memory error detector
==483== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==483== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==483== Command: ./main ../old\ projects
==483==
==483== error calling PR_SET_PTRACER, vgdb might block
vgdb 可执行文件(valgrind 的一部分)用于 'connect' valgrind 启动监视器命令或在 gdb 和你的之间创建 link 在 valgrind 下处理 运行。 如果您的进程在系统调用中被阻塞,vgdb 需要 'wake up' 您的进程 为此必须能够 'ptrace' 您的流程。 根据系统上安全配置的方式,valgrind 可能必须告诉内核 ptrace 本身没问题。 这是使用系统调用 prctl (PR_SET_PTRACER) 完成的。 如果此系统调用失败,您会看到此消息。 结果是 vgdb 无法连接到您的进程,只要 因为您的进程在系统调用中被阻止。 因此,除非您迫切需要在阻塞时调试您的进程 一个系统调用,或者在系统调用中被阻止时启动一个监视器命令,有 没有后果。
然而,此错误不是预期的。 所以,请在 valgrind bugzilla 上报告错误。 附上输出:cat /proc/sys/kernel/yama/ptrace_scope 另外,如果你可以使用 strace -f valgrind 就好了 并提取系统调用 prctl (PR_SET_PTRACER) 失败的原因 (特别是 errno)。