programing

VSCODE에서 "sudo"로 프로그램을 디버깅하는 방법

yellowcard 2023. 7. 24. 22:25
반응형

VSCODE에서 "sudo"로 프로그램을 디버깅하는 방법

VSCODE에서 프로그램을 디버깅하려고 합니다.Ubuntu에서 루트 또는 "sudo"와 함께 프로그램을 시작해야 합니다.이것을 달성하는 가장 좋은 방법은 무엇입니까?예제 시작 구성이 도움이 됩니다.감사해요.

저는 최근에 비슷한 상황에 처해 있었습니다. 저는 .vscode 디렉토리 아래에 있는 launch.json 파일에 {"sudo": true}를 추가하여 해결했습니다.

방금 .sysode>syslog.json에서 다음 행을 추가했습니다.

{
    "version": "0.2.0",
    "configurations": [
        {
            "other..." : "configs...",
            "request": "launch",
            "console": "integratedTerminal",
            "args": [
                "${file}"
            ],
            "sudo": true
        }
    ]
}

제가 사용하고 있는 VS 코드 버전은 -입니다.

버전: 1.49.1 OS: Ubuntu 16.04 LTS, 64비트

일부 언어에서는 작동하지 않는 것 같습니다.나의 경우, 그것은 python 3.x에서 작동했습니다. 다른 사용자들은 그것이 C/C++에서 작동하지 않는다고 보고했습니다.

다음을 수행했습니다.

  1. 를 들어, "를 my home이 포함됩니다. "gdb "gdb"라는 스크립트가 포함됩니다.pkexec /usr/bin/gdb "$@"
  2. 실행 가능하게 합니다.
  3. "miDebuggerPath"를 추가하여 스크립트를 호출하도록 VSCode에서 launch.json을 수정합니다(그에 따라 사용자 이름을 변경합니다).
...
            "externalConsole": false,
            "miDebuggerPath": "/home/<username>/gdb",
            "MIMode": "gdb",
...
  1. 디버깅할 디깅하는동, 사용버를 합니다.top프로세스가 루트로 실행되고 있는지 확인하는 등의 작업을 수행합니다.

그만하면 충분할 거야. .

내 솔루션:

더하다/usr/bin/gdb/etc/sudoers여기처럼

내용이 다음과 같은 실행 파일 추가

sudo /usr/bin/gdb "$@"

miDebuggerPath

sudogdb를 실행하기 위해 vcode를 만드는 방법을 모릅니다.그러나 실제로 디버깅을 위해 suddb를 실행할 수 있도록 vcode를 실행할 수 있습니다.

sudo code . --user-data-codice='.

시작.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

main.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 = %d\n", getuid());
}

이것은 자바에 효과가 있었지만, 다른 언어에도 효과가 있을 수 있습니다.

세션을 때"VCode"라는 터미널을 합니다.라는 터미널을 생성합니다.Debug: MainCtrl 다음 Ctrl+C를 합니다.sudo su에는 이 권한으로 합니다.

이 문제를 해결하는 매우 쉬운 방법은 다음과 같습니다.

$ sudo chown root:$(id -g) ~/go/bin/dlv
$ sudo chmod u+s ~/go/bin/dlv

이렇게 하면 dlv가 루트로 실행됩니다.

그것은 다른 언어들도 거의 같습니다.디버거가 다른 구성 파일이나 래퍼에 의존하는 대신 루트로 실행되도록 허용합니다.

이전 답변과 같이 /home/youruser/gdbasroot와 같은 홈 디렉토리에 실행 파일이 있는 방법을 사용해야 했습니다.

하지만 저는 그 내용을 사용해야 했습니다.

sudo /usr/bin/gdb "$@"

암호를 요청하지 않고 gdbk를 작업할 수 없었기 때문에 gdbk 대신에. (vscode remote debugger에서 호출한 대로 작동하지 않았습니다.)저는 이 게시물(업데이트 및 승인된 답변)에 따라 수행했습니다.

https://askubuntu.com/questions/542397/change-default-user-for-authentication

sudo를 사용할 때는 vscode 터미널에서 sudo 명령을 실행할 수 있으며, 그 이후로는 비밀번호 없이 "sudo 디버거"를 사용할 수 있습니다.그렇지 않으면 vscode 메시지가 표시되고 이를 처리할 수 없습니다.

인사말

언급URL : https://stackoverflow.com/questions/40033311/how-to-debug-programs-with-sudo-in-vscode

반응형