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
'Computer Science > Python' 카테고리의 다른 글
Ctypes를 이용한 Python과 C와의 연결 (0) | 2019.07.05 |
---|---|
PyCharm에서 PYTHONPATH 설정하기 (0) | 2019.04.22 |
Jupyter 서버 설치 및 실행법 (8) | 2018.04.25 |
Python 파라메터 앞에 *와 **의 의미 (*args, **kwargs) (0) | 2017.02.02 |
Python 2 와 Python 3의 차이점 (0) | 2017.01.31 |