簡體   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