gdbserver 로 원격 디버깅

# local 은 mac 이고 remote 는 centos docker g++ 환경
# centos 7 gdbserver 설치
sudo yum install gdb-gdbserver

# mac 에 gdb 설치
brew install gdb

# 도커 컨테이너에서 gdbserver 실행시 같은 에러가 발생하면
Cannot trace created process PTRACE_O_TRACEFORK test: Operation not permitted

# docker run 시 다음 옵션을 추가해서 실행해야 한다.
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined 옵션을 추가한다.

# 로컬 port 바인딩도 필요하다.
-p 9999:9999

# remote 에서
# remote 테스트 ysoftman.cpp 파일 작성
cat > ysoftman.cpp << zzz
#include <iostream>
#include <string>
using namespace std;
int main() {
    int a = 1;
    cout << a << endl;
    string s = "ysoftman";
    cout << s << endl;
    return  0;
}
zzz

# 빌드, -g 옵션으로 디버깅 정보를 포함시킨다.
g++ -g ysoftman.cpp

# gdbserver 실행시
gdbserver 127.0.0.1:9999 ./a.out

# gdbserver 강제 종료시
# (gdb 에서 quit 하면 gdbserver 도 종료된다.)
kill -9 $(ps -ef | grep -i "gdbserver 127.0.0.1" | grep -v "grep" | awk '{print $2}')

# local 에서도 ysoftman.cpp 가 있어야 소스를 볼 수 있다.
gdb
(gdb) target remote 127.0.0.1:9999
(gdb) list  #소스보기
(gdb) b 9 #9줄 브레이크 포인트
(gdb) continue # remote 는 run 대신 continue로 실행한다.
(gdb) info locals # 지역변수 보기
(gdb) p a  #변수 a 값 출력
(gdb) quit  #하면 gdb 도 종료된다.

comments:

댓글 쓰기