source

우분투에서 이클립스의 루트로 애플리케이션을 디버그하는 방법은 무엇입니까?

lovecheck 2023. 8. 25. 23:45
반응형

우분투에서 이클립스의 루트로 애플리케이션을 디버그하는 방법은 무엇입니까?

저는 libpcap을 사용하여 애플리케이션을 프로그래밍하고 있습니다.정상 모드에서 응용 프로그램을 디버그하면 pcap에서 네트워크 장치를 가져올 수 없습니다.애플리케이션을 루트에서 디버그해야 할 것 같습니다.루트에서 응용 프로그램을 디버그하려면 어떻게 해야 합니까?루트 암호를 가지고 있습니다.Eclipse는 디버깅 애플리케이션에 루트를 추가할 수 있는 옵션이 있다고 생각합니다만, 어떻게 해야 할지 모르겠습니다. 도와주세요.

  1. 사용자가 암호를 묻지 않고 를 루트로 실행할 수 있도록 합니다.
    sudo visudo
    다른 모든 규칙 뒤에 다음 행을 추가합니다.
    <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
  2. gdb를 루트로 실행하도록 에서 디버그 구성 생성 또는 수정
    > > /C++ > Debug:debug:debug: 실행 > 디버그 구성 > C/C++ 애플리케이션 > 당신의 프로젝트 디버그:
    > > GDB 거버디 > 메인 > GDB 합니다.gdbsudo -u <youruser> gdb

업데이트(및 경고!):

그의 논평에서 Gose는 이 대답은 경고와 함께 와야 한다고 지적했습니다.

사용자가 사용할 수 있도록 설정sudo위해서gdb답변에서 제안한 것처럼 실제로 관리자 권한을 부여합니다. 많은 경우 원치 않는 부작용일 수 있습니다.따라서 사용자가 시스템에 해를 입힐 것으로 예상되지 않는 환경(예: 사용자의 개인 컴퓨터 또는 가상 시스템)에서 적절한 답변이라고 생각합니다.

다중(신뢰할 수 없는) 사용자 환경의 경우 unix의 파일 기능을 사용하여 다음을 활성화하는 것이 더 나은 아이디어라고 생각합니다.gdb관리자 수 .

localhost에서 gdbserver를 사용하여 기존 프로세스를 연결할 수 있습니다. 명령줄은 다음과 같습니다.

sudo gdbserver :<listening port> --attach <pid>

또는 gdbserver를 사용하여 새 프로세스를 생성할 수 있습니다.

sudo gdbserver :<listening port> <process executable>

그런 다음 Eclipse의 디버거 탭에서 디버거 항목을 만들고 gdbserver를 선택한 다음 아래의 연결 탭에 수신 포트를 입력할 수 있습니다.

sudo와 함께 Eclipse 출시 (완전성을 위해서만: http://www.eclipse.org/forums/index.php?t=msg&goto=516838&)

업데이트: xmoex 솔루션을 따릅니다.이클립스를 루트로 실행하는 경우(즉,sudo 사용) 파일이 루트 소유가 됩니다.아마 원치 않으실 겁니다

또 다른 해결책은 여기에 언급된 것처럼 일부 pcap 캡처를 수행할 수 있는 권한을 사용자(또는 gdb 실행 파일)에게 부여하는 것입니다.다음과 같은 것으로:

setcap cap_net_raw,cap_net_admin=eip /usr/bin/gdb

루트가 되지 않고 gdb에 패킷을 캡처할 수 있어야 합니다.

제가 한 방법은 다음과 같습니다.

C/C++ 원격 응용 프로그램 만들기

  1. 목표물에서 sudo가 PW를 요구하지 않는지 확인합니다.
  2. 디버그 구성 → 디버거포트 번호 확인
  3. 디버그 구성 편집기본 → 응용 프로그램 전에 실행할 명령

변경 내용:

sudo gdbserver :<port number> <path to application>;exit #

이것은 기본적으로 sudo 내부에서 일반적으로 이클립스에 의해 실행되는 gdb 서버를 실행하며, 뒤에 오는 '#'은 이클립스 명령을 실행하지 못하게 합니다.

이 질문은 오래 전에 물었지만 만약 이것이 누군가에게 도움이 된다면 나는 버그질라에서 버그를 열었고 이 짧은 스레드는 문제를 해결했습니다: 버그질라 버그.

실행 파일이 있는 디렉토리의 콘솔에서 다음 작업을 수행합니다.

sudo gdb ./my_program

Eclipse가 원격 디버깅을 지원하는 경우 로컬로 실행되더라도 이를 수행할 수 있습니다.

콘솔에서:

sudo gdbserver localhost:<port_number> ./my_program

그런 다음 Eclipse에게 주소(로컬 호스트 및 선택한 포트 번호)를 알려줍니다.

아, 그래요, 당신이 이걸 하는 이유는 당신이 사용했기 때문이라고 말했습니다.libpcap따라서 다른 네트워크 트래픽 외에도 디버깅 연결 패킷을 캡처할 수 있으므로 TCP를 통한 원격 디버깅을 사용하지 않을 수 있습니다.

이 경우 직렬 포트를 통해 원격(그러나 실제로는 로컬) 디버깅을 수행합니다.로컬 컴퓨터에서 이 작업을 수행한 적은 없지만 실제 직렬 포트 두 개(늘 모뎀을 통해 연결)를 사용하거나 psudoterminal을 사용해 볼 수 있습니다.

sudo gdbserver /dev/ptmx ./my_program

이렇게 하면 아래에 psudo-terminal이 생성됩니다./dev/pts/이름을 알아내야만 하고 제한적인 권한으로 만들 수도 있습니다.당신은 그것들을 피할 수 있습니다.많은 터미널 창을 루트로 실행하지 않는 한, 아래에 많은 항목이 있을 가능성은 없습니다./dev/ptsroot에 속하므로 위 명령을 실행한 후 수행하는 작업을 기록합니다.sudo chmod또는sudo chown일반 사용자가 사용할 수 있도록 만든 다음 원격 디버깅 대상에 대한 직렬 연결로 사용하도록 디버거에 지시합니다.

가장 쉬운 방법은 sudo./debug를 시도한 다음 평소처럼 디버그합니다.

언급URL : https://stackoverflow.com/questions/2891356/how-to-debug-application-as-root-in-eclipse-in-ubuntu

반응형