Python과 C++ 함께 디버그 (혼합 디버깅)


이전 Ctypes 예제를 바탕으로 C코드로 작성된 부분을 Python을 실행 할 때 어떻게 Breakpoint를 잡아서 Debug하는지를 설명한다.

2019.7월 기준으로 필자가 아는한 Visual Stduio만이 IDE중에선 이러한 혼합 디버깅을 지원 한다 (참조).

본 포스팅에서는 Mac이나 Ubuntu환경에서 가능한 LLDB를 활용한 방식을 소개한다.

디버깅

C++ GCC로 컴파일 할 떄 당연히 -g 옵션을 넣어서 컴파일한다. 그래야 C++코드를 디버깅시 볼 수 있다. 그렇지 않으면 Assembly로 코드가 나오고 디버깅도 어쩌면 정상 동작하지 않는다.

아래와 같이 LLDB로 옵션을 주고 실행한다음 원하는 곳에 breakpoint를 걸고 run을 실행 한다.

$ lldb python3 callclib1.py

(lldb) target create "python3"
Current executable set to 'python3' (x86_64).
(lldb) settings set -- target.run-args  "callclib1.py"

breakpoint set --name simple_function

(lldb) run

최종적으로 아래와 같이 simple_function에 breakpoint가 걸리는 것을 알 수 있다.

Process 7816 launched: '/Users/jeminlee/anaconda3/bin/python3' (x86_64)
1 location added to breakpoint 1
Calling simple C counting function four times:
Process 7816 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000100550dc4 libclib1.so simple_function at clib1.c:7:12
   4
   5       int simple_function(void) {
   6           static int counter = 0;
-> 7           counter++;
   8           return counter;
   9       }
   10
Target 0: (python3) stopped.

실행 스크린샷
스크린샷 2019-07-05 오후 6.24.39

참고문헌


+ Recent posts