원격 프로세스에 연결하는 방법이 있습니까?

원격 프로세스에 연결하는 방법이 있습니까?

현재 내 애플리케이션의 원격 디버깅에 문제가 있습니다 gdb. 원격 프로세스에 연결하고 IDE시각적 디버깅(내가 사용하는 )을 사용할 수 있기를 원합니다 Visual Studio Code.

문제는 IDE가 이를 통해 로컬 프로세스에 연결할 수 있지만 pid그다지 유용하지 않다는 것입니다. 그래서 로컬 포트 ​​포워딩을 요청하면 로컬 포트 ​​포워딩을 사용하여 연결할 수 있는데, 이는 제가 실제로 원하는 것이 아닙니다.

pid실제로 원격 프로세스인 것을 설정하는 "pid-forwarding"과 같은 작업을 수행하는 것이 가능합니까 ?

답변1

~처럼빌리 삼촌즉, 이를 수행하는 좋은 방법은 GDB의 원격 디버깅 기능을 사용하는 것입니다. 이는 디버깅하려는 프로세스를 실행하는 호스트에서 "작은" 디버거를 실행하고 gdb개발 환경을 실행하는 호스트에서 이에 연결함으로써 수행됩니다. VS Code를 비롯한 많은 IDE가 디버깅을 지원하므로 gdb, 다른 플랫폼을 포함해 어디서나 실행되는 프로세스에 대한 개발 환경을 편안하게 사용할 수 있습니다.

디버깅하려는 프로세스를 실행하는 호스트에서 설치하고 gdbserver(일반적으로 정적 바이너리를 복사하여) 실행해야 합니다. 예를 들면 다음과 같습니다.

gdbserver --attach :9953 ${pid}

포트 9953에 나열되고 지정된 프로세스 ID에 추가됩니다. 서버에 연결하는 여러 방법(직렬 포트, IP 주소...)을 지정할 수 있으며 디버깅을 위한 명령을 실행하거나 실행 중인 프로세스에 연결하거나 특정 프로세스 없이 "디버그 서버"를 실행할 수도 있습니다.

개발 환경이 있는 호스트에서는 다음 위치에서 대상에 연결할 수 있습니다 gdb.

$ gdb ...

(gdb) target remote <IP address>:9953

다른 모든 것은 평소와 같이 계속됩니다. gdb필요한 파일(라이브러리 등)은 원격 대상에서 전송되지만 속도를 높이기 위해 파일의 로컬 복사본을 가리킬 수 있습니다. 로컬 리소스를 사용합니다.

이는 두 호스트가 동일할 때 예상한 대로 작동하지만 다른 호스트에서도 작동하도록 하는 것도 가능합니다.예를 들어Linux 시스템에서 Windows 프로그램을 디버깅하거나 보다 일반적으로 대규모 개발 플랫폼의 소형 임베디드 시스템에서 실행되는 프로그램을 디버깅합니다.

관련 정보