在我的筆記本電腦上,我可以將 VS Code 除錯器附加到正在運行的 python 行程,但在我的桌面上,嘗試連接總是超時。
- 筆記本電腦:Debian 穩定版 (11),python 3.9
- 桌面:流行作業系統(Ubuntu 21.10),python 3.9.7
- 我已登錄 Github 帳戶,因此 VS Code 設定和擴展已同步。
我正在使用這個簡單的測驗檔案:
import time
while True:
print("hello, world")
time.sleep(1)
當我從(默認)launch.json 啟動腳本時,除錯作業正常:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true
}
]
}
但是,當我使用以下(也是默認的)launch.json 附加到我已經運行的行程時,我總是在結束操作時收到一條超時訊息(在桌面上,相同的腳本在筆記本電腦上作業):
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Attach using Process Id",
"type": "python",
"request": "attach",
"processId": "${command:pickProcess}",
"justMyCode": true
}
]
}
啟用logToFile和比較我的筆記本電腦和臺式機之間的日志并沒有顯示任何差異,除了發生超時和使用的埠(33191我的筆記本電腦35205上的埠,我的臺式機上的埠,都127.0.0.1用作主機)。將此埠放入我的配置中不起作用,但我也不完全確定此埠號來自何處以及除錯器如何將自身注入行程。
除錯器似乎可以找到該行程(我可以從下拉串列中選擇它),但不知何故無法實際連接到它。有誰知道可能出了什么問題,或者有什么建議可以為我指明正確的方向?我已經嘗試了其他帖子中的一堆建議,但他們看不到作業(大部分是過時的或用于運行當前檔案而不是附加到現有行程)。
uj5u.com熱心網友回復:
深入挖掘我發現有多個日志檔案,其中一個有錯誤ptrace_scope(我從未聽說過)。
簡單地說,檔案的值/proc/sys/kernel/yama/ptrace_scope決定了除錯器可以訪問什么樣的行程。不同的值是:
- 0:可以除錯所有行程,只要它們具有相同的 uid。
- 1:只能除錯一個父行程。
- 2:只有管理員可以使用 ptrace
- 3:不能使用 ptrace 跟蹤任何行程。
(從這里列出)
該檔案0在我的筆記本電腦上設定為(附加作業的地方),但在我的桌面上設定為1,所以我將此值更新為0,現在除錯作業正常。
echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope
編輯: 我在 VSCode 存盤庫中遇到了這個問題:
https://github.com/microsoft/vscode/issues/146348
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/460888.html
標籤:Python 调试 视觉工作室代码 vscode 调试器
