如何在 VSCODE 中使用"sudo"调试程序
How to debug programs with "sudo" in VSCODE
我正在尝试调试VSCODE中的程序。该程序需要以root身份启动,或者在Ubuntu上使用"sudo"启动。实现这一目标的最佳方式是什么?一个示例启动配置将会有所帮助。谢谢。
我最近也遇到过类似的情况我通过在launch中添加{"sudo": true}解决了这个问题。.vscode目录下的Json文件。
刚刚在.vscode>launch.json中添加了以下行
{
"version": "0.2.0",
"configurations": [
{
"other..." : "configs...",
"request": "launch",
"console": "integratedTerminal",
"args": [
"${file}"
],
"sudo": true
}
]
}
VS code版本我使用的是-
版本:1.49.1操作系统:Ubuntu 16.04 LTS, 64位
这似乎不适用于所有语言。对我来说,它适用于python 3。
我做了以下操作:
- 创建一个名为"gdb"的脚本,例如在我的主目录中,包含:
pkexec /usr/bin/gdb "$@"
- 使其可执行
- 修改启动。通过添加"miDebuggerPath": 来调用脚本(显然要相应地更改用户名)
...
"externalConsole": false,
"miDebuggerPath": "/home/<username>/gdb",
"MIMode": "gdb",
...
- 在调试时,使用
top
或类似的方法来验证进程是否以root身份运行。这应该足够了。
我的解决方案:
向/etc/sudoers
中加入/usr/bin/gdb
添加一个内容为
的可执行文件sudo /usr/bin/gdb "$@"
设置miDebuggerPath
为文件
不知道如何让vscode运行sudo gdb。但是你可以用sudo来运行vscode,所以你可以用sudo来调试gdb。
sudo代码。——user-data-dir = '。'
launch.json :
{
"miDebuggerPath": "${workspaceFolder}/gdb_root.sh"
}
gdb_root.sh :
#!/bin/bash
SELF_PATH=$(realpath -s "$0")
if [[ "$SUDO_ASKPASS" = "$SELF_PATH" ]]; then
zenity --password --title="$1"
else
exec env SUDO_ASKPASS="$SELF_PATH" sudo -A /usr/bin/gdb $@
fi
chmod +x gdb_root.sh
c :
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
// accept signal from VSCode for pausing/stopping
char *sudo_uid = getenv("SUDO_UID");
if (sudo_uid)
setresuid(0, 0, atoi(sudo_uid));
printf("uid = %dn", getuid());
}
这适用于java,但也可能适用于其他语言:
当第一次运行调试会话时,VSCode创建一个终端,例如Debug: Main
。只需打开终端,按Ctrl+C,输入sudo su
,输入密码,下一次调试会话将以root权限从该终端启动
解决这个问题非常简单的方法是:
$ sudo chown root:$(id -g) ~/go/bin/dlv
$ sudo chmod u+s ~/go/bin/dlv
这样dlv将作为root执行。
对于其他语言也是一样的。允许调试器以root身份运行,而不是依赖于其他配置文件或包装器。
与前面的答案一样,我必须在主目录下使用可执行文件的方法,如:/home/youruser/gdbasroot
但是我必须使用内容:
sudo/usr/bin/gdb "$@"
而不是gdbk,因为我不能让gdbk工作而不提示密码(它不工作,因为它被vscode远程调试器调用)。我是根据这个帖子(被点赞和接受的答案)做的:
https://askubuntu.com/questions/542397/change-default-user-for-authentication当你使用sudo时,你可以在vscode终端发出sudo命令,然后你可以使用"sudo调试器"。没有密码。否则vscode会收到提示,无法处理。
问候
- 如何在添加文件的情况下在VSCode中调试C++程序
- 如何在 VsCode 上调试 C++/C 程序
- 调试C++程序时遇到问题
- 如何模拟时间的流逝来调试程序?
- 如何在main()之前调试程序崩溃
- 当Visual Studio停止调试程序时会自动清理内存
- VS 代码C++:无法启动调试 - 程序路径丢失或无效
- 如何在 arm 平台中调试 c 程序中的全局变量损坏
- 如何调试 C++ 程序
- 在php中使用sudo运行程序
- 如何使用数组调试C++程序
- 使用Valgrind调试程序-检测分段故障
- 调试程序时奇怪的GDB消息C++
- 使用gdb在MS VC++2010 Express中编译的调试程序
- 调试C程序的断言错误
- CRT参数验证使多线程调试程序崩溃
- 在Linux下捕获SIGKILL的调试程序
- 在c++中调试程序时,我得到一个空白屏幕
- 在GDB中调试程序时如何获取程序的环境
- 如何在 VSCODE 中使用"sudo"调试程序