[英]Why does GDB backtrace comes up with ?? () when remote debugging with 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 使用以下规则
我不知道ip netns exec
如何影响这些变量。 也许您可以使用脚本将 HOSTNAME 设置为 Valgrind 看到的任何内容,然后启动 gdb。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.