【问题标题】:Valgrind showing error calling pr_set_ptracer, vgdb might blockValgrind 显示错误调用 pr_set_ptracer,vgdb 可能会阻塞
【发布时间】:2019-07-25 16:09:52
【问题描述】:

我正在使用 Valgrind 来查找我的 C 程序的内存泄漏,尽管它看起来运行良好并显示分配和释放的内存。但是,我想知道它为什么会抛出这个错误以及它的后果是什么。

这里是错误的sn-p:

==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

【问题讨论】:

    标签: c valgrind


    【解决方案1】:

    vgdb 可执行文件(valgrind 的一部分)用于“连接”到 valgrind 启动监视器命令或在 gdb 和您的 在 valgrind 下运行的进程。 如果您的进程在系统调用中被阻塞,vgdb 需要“唤醒”您的进程 为此必须能够“跟踪”您的流程。 根据系统上的安全配置方式,valgrind 可能必须告诉内核 ptrace 本身没问题。 这是使用系统调用 prctl (PR_SET_PTRACER) 完成的。 如果此系统调用失败,那么您会看到此消息。 结果是 vgdb 无法连接到您的进程 因为您的进程在系统调用中被阻止。 因此,除非您在被阻止时迫切需要调试您的进程 系统调用,或在系统调用中被阻塞时启动监控命令,有 没有后果。

    但此错误不是预期的。 所以,请在 valgrind bugzilla 上报告一个错误。 附加以下输出: cat /proc/sys/kernel/yama/ptrace_scope 另外,如果您可以使用 strace -f valgrind 并提取系统调用 prctl (PR_SET_PTRACER) 失败的原因 (特别是 errno)。

    【讨论】:

    • 哦!感谢您的回复,我没有写这个问题,但是我在wsl上使用valgrind而不是在裸Linux中为同一个程序使用时遇到了这个错误。所以,情况可能是这样,但是我得到了相同的结果,所以没有问题。
    • 感谢您的评论,我自己在 WSL 上看到了同样的事情。
    • 在 WSL 上看到同样的东西,似乎在 Build 17723 中修复了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2014-05-14
    • 2022-01-11
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多