[英]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.