繁体   English   中英

vgdb:在进程网络命名空间中运行时“没有这样的文件或目录”共享内存文件

[英]vgdb: "No such file or directory" shared memory file when running in process network namespace

我正在尝试使用 Valgrind 和 GDB 调试程序。 要在我的测试套件中运行该程序,它必须在网络名称空间内运行(使用ip netns exec <namespace> ),因为它必须模拟不同的网络连接。 要运行我要调试的程序,我运行以下命令:

ip netns exec my-ns valgrind --leak-check=full --vgdb=yes --vgdb-error=0 <program> <args>

这运行没有任何问题,但是当我尝试使用 GDB 连接时,出现以下错误:

(gdb) target remote | vgdb
Remote debugging using | vgdb
syscall failed: No such file or directory
error opening /tmp/vgdb-pipe-shared-mem-vgdb-<pid>-by-root-on-??? shared memory file
Remote communication error. Target disconnected.: Connection reset by peer.

我试过在命名空间内和不在命名空间内运行 GDB 命令,如下所示,它们都给了我同样的错误:

gdb <binary>
ip netns exec my-ns gdb <binary>

查看/tmp中 VGDB 生成的文件时,我发现以下内容:

prw------- 1 root root  0 Dec 20 08:31 vgdb-pipe-from-vgdb-to-<pid>-by-root-on-<hostname>
-rw------- 1 root root 48 Dec 20 08:31 vgdb-pipe-shared-mem-vgdb-<pid>-by-root-on-<hostname>
prw------- 1 root root  0 Dec 20 08:31 vgdb-pipe-to-vgdb-from-<pid>-by-root-on-<hostname>

我以 root 身份运行所有命令,因此这里也不应该有权限问题。 我还验证了在没有进程命名空间的情况下运行相同的进程没有问题 - 尽管我无法执行我的测试。 另外,奇怪的是,当我在没有ip netns exec的情况下运行时,我在/tmp中得到以下文件,似乎没有获取我的主机名:

prw------- 1 root root  0 Dec 20 08:44 'vgdb-pipe-from-vgdb-to-<pid>-by-root-on-???'
-rw------- 1 root root 48 Dec 20 08:44 'vgdb-pipe-shared-mem-vgdb-<pid>-by-root-on-???'
prw------- 1 root root  0 Dec 20 08:44 'vgdb-pipe-to-vgdb-from-<pid>-by-root-on-???'

感谢您的回复。

为了确定主机名,Valgrind 和 vgdb 使用以下规则

  1. 使用 HOST 环境变量
  2. 使用 HOSTNAME 环境变量
  3. 如果以上均未设置,则使用“???”
  4. 如果设置了其中一个环境变量并且主机名包含“/”,则再次“???” 用来。

我不知道ip netns exec如何影响这些变量。 也许您可以使用脚本将 HOSTNAME 设置为 Valgrind 看到的任何内容,然后启动 gdb。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM