반응형
디버깅이란 말 그대로 버그를 잡는다는 뜻이다.
코딩을 잘하는 사람이 대체로 디버깅도 잘하는 법이지만, 아무래도 디버깅을 유별나게 잘하는 사람들이 있다.
또, 디버깅 실력은 사람의 실력도 중요하지만 그가 사용하는 툴의 능력도 결코 무시할 수 없는 것 같다.
Visual C++이나, Eclipse같은 툴을 쓸 수 있다면야 참 좋겠지만,
아무래도 임베디드 환경에서 이런 호사는 기대하기 힘들고
심지어 gdb마저도 쓰기 힘든 경우가 많다.
이럴 때 strace, ltrace를 사용해보는 것도 좋을 듯 싶다.
지금까지 gdb없으면 디버깅 못한다고 짧은 생각을 해왔는데 ltrace를 보니 때론gdb보다 뛰어나다는 생각마저 든다.
ltrace 는 라이브러리상에 호출되는 symbol들의 이름을 출력해준다.
콜 스택을 보여주진 못하지만, API들이 순차적으로 호출되는 흐름을 보여주기 때문에
만약 비정상적인 동작을 할 때,
또는 이상하게 시간이 많이 걸릴 때
문제를 추적하는데 도움을 줄 수 있다.
물론 함수콜만을 보여주기 때문에 특정 함수 내부에서 일어나는 코드들을 보장못하지만 코드의 흐름을 분석하고 이해하는데 큰 도움이 된다.
또, 해당 함수를 수행하는데 걸린 시간을 출력할 수 있어서, 전체적인 수행시간에 어떤 부분이 많은 시간을 잡아먹는지 분석도 가능하다.
코딩을 잘하는 사람이 대체로 디버깅도 잘하는 법이지만, 아무래도 디버깅을 유별나게 잘하는 사람들이 있다.
또, 디버깅 실력은 사람의 실력도 중요하지만 그가 사용하는 툴의 능력도 결코 무시할 수 없는 것 같다.
Visual C++이나, Eclipse같은 툴을 쓸 수 있다면야 참 좋겠지만,
아무래도 임베디드 환경에서 이런 호사는 기대하기 힘들고
심지어 gdb마저도 쓰기 힘든 경우가 많다.
이럴 때 strace, ltrace를 사용해보는 것도 좋을 듯 싶다.
지금까지 gdb없으면 디버깅 못한다고 짧은 생각을 해왔는데 ltrace를 보니 때론gdb보다 뛰어나다는 생각마저 든다.
ltrace 는 라이브러리상에 호출되는 symbol들의 이름을 출력해준다.
콜 스택을 보여주진 못하지만, API들이 순차적으로 호출되는 흐름을 보여주기 때문에
만약 비정상적인 동작을 할 때,
또는 이상하게 시간이 많이 걸릴 때
문제를 추적하는데 도움을 줄 수 있다.
물론 함수콜만을 보여주기 때문에 특정 함수 내부에서 일어나는 코드들을 보장못하지만 코드의 흐름을 분석하고 이해하는데 큰 도움이 된다.
또, 해당 함수를 수행하는데 걸린 시간을 출력할 수 있어서, 전체적인 수행시간에 어떤 부분이 많은 시간을 잡아먹는지 분석도 가능하다.
반응형
'프로그래밍 언어 > C/C++' 카테고리의 다른 글
gcc 업그레이드 (4.5.0) (0) | 2010.07.21 |
---|---|
Header안에 static 변수 (0) | 2010.02.21 |
unresolved symbol 에 관하여 (0) | 2010.01.27 |
[Python]파일명 바꾸기 (0) | 2009.09.02 |
AspectC++ (0) | 2009.08.31 |