Computer Science/Python
Python과 C++ 함께 디버그 (혼합 디버깅)
JAYNUX
2019. 7. 7. 09:08
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.
실행 스크린샷
참고문헌
- TVM-codegen debugging 방법: https://discuss.tvm.ai/t/how-to-debug-tvms-codegen-codes/3090
- TVM에서 나온 방법: https://discuss.tvm.ai/t/how-to-debug-tvmruntime/111/9