通过 VS Code 在 minikube 中远程调试 pod 出错,并从 remoteProcessPickerScript 解析错误

remote debugging pod in minikube via VS Code errors out with parsing error from remoteProcessPickerScript

提问人:swcraft 提问时间:11/15/2023 最后编辑:journpyswcraft 更新时间:11/17/2023 访问量:105

问:

赏金将在 18 小时后到期。这个问题的答案有资格获得 +50 声望赏金。SWCRAFT正在寻找一个规范的答案

突然之间,我在使用 launch.json 和安装在 .net core 项目的 docker 容器中的远程调试器通过 VS Code 进行远程调试时遇到了问题。

错误消息清楚地说明了问题是什么,对我来说,与指向的错误相比,查看文件没有任何意义。(顺便说一句,正在使用的本地文件看起来与此链接中文件的主分支的内容完全相同:remoteProcessPickerScript)

这是我尝试通过 dotnet 环境将 VS Code 的远程调试功能附加到 pod 时遇到的错误:

kubectl exec -i pod-name -- /bin/sh -c "sh -s" < "c:\...\.vscode\extensions\ms-dotnettools.csharp-2.10.28-win32-x64\scripts\remoteProcessPickerScript"
stderr: sh: 30: Syntax error: "}" unexpected (expecting "then")
command terminated with exit code 2
C# Kubernetes visual-studio-code minikube 远程调试

评论


答:

1赞 Ben Thomas 11/17/2023 #1

我遇到了同样的问题,就我而言,它与remoteProcessPickerScript文件的行尾有关。我通过在 VS Code 中打开它并将行尾从 CRLF 更改为 LF 并重新运行来解决它。

但是,我不确定此问题的根本原因,因为 master 分支上的文件具有正确的行结尾。

评论

0赞 swcraft 11/18/2023
多谢。您实际上确实为我提供了正确的解决方案,但道歉@VonC作为答案,因为他提供了可能的解决方法的彻底步骤。
1赞 VonC 11/17/2023 #2

确保本地目录中的目录与 GitHub 存储库的 master 分支中的目录完全匹配。任何偏差都可能导致语法错误。remoteProcessPickerScript.vscode

# Compare local script with the remote one
diff "c:\...\.vscode\extensions\ms-dotnettools.csharp-2.10.28-win32-x64\scripts\remoteProcessPickerScript" "path/to/downloaded/script/from/github"

该脚本可能是为特定的 shell(如 bash)编写的,但它是由另一个 shell(如 sh)解释的。确保脚本的 shebang 行(如果有)与容器中使用的 shell 匹配。

如果您使用的是 Windows 计算机,则脚本中的行尾可能不是 Unix 样式的。这可能会导致 Unix 环境中出现问题。CRLFLF

# Convert CRLF to LF
dos2unix "c:\...\.vscode\extensions\ms-dotnettools.csharp-2.10.28-win32-x64\scripts\remoteProcessPickerScript"

此外,如果脚本中存在特殊字符,则在传递时可能需要以不同的方式对它们进行转义。kubectl exec

若要进行测试,请尝试直接在容器的 shell 中运行脚本

kubectl exec -i pod-name -- /bin/bash -c "cat > script.sh" < "c:\...\.vscode\extensions\ms-dotnettools.csharp-2.10.28-win32-x64\scripts\remoteProcessPickerScript"
kubectl exec -it pod-name -- /bin/bash -c "./script.sh"