본문 바로가기

컴퓨터/디버깅32

valgrind 를 이용한 메모리 관리 C/C++ 의 골치거리 중 하나인 메모리 문제를 조금이나마 쉽게 해결하고자 나와 있는 프로그램 중 사용이 편리하고 open-source 인 valgrind 에 대해 알아 보자. valgrid는 leak 이 생긴/생길 가능성이 있는 코드의 부분을 찾아 주고, 잘못된 메모리 접근을 알려 주는 등의 기능을 한다. 이것은 특히 다른 사람이 작성한 소스 코드를 이용해야 할 때 유용한데, 코드의 전체적인 내용을 파악하지 못한 상태에서도 메모리 검사를 할 수 있기 때문이다. 나의 경우도 지금 남의 코드를 가져 와서 하고 있기 때문에, 일단 실행 시간 에러는 없이 실행되는 것을 확인했지만 정말로 문제없이 돌아가는 것인지 확인하기 위해 오랜만에 valgrind를 꺼내 들었다. 실제 사용 예는 다음과 같다. [adnoct.. 2011. 3. 3.
정규표현식이 들어간 디버깅 정규표현식을 이용하여 작업을 하려고 할 때, 원하는 패턴으로 matching 을 시켜서 일치된 패턴을 추출하여 사용하려 할 때가 자주 있다. 문제는 일치된 결과가 하나도 없을 때 왜 패턴 matching 이 되지 않았는지 알기 어렵다는 것인데, 다음과 같이 점진적으로 패턴을 지워 나가거나, 추가해 나가는 식으로 하면 왜 자신이 작성한 정규표현식이 주어진 텍스트에 맞지 않았는지에 대한 약간의 실마리를 얻을 수 있다. (아래는 파이썬에서의 사용 예. 펄이나 C++(boost에서), vim 도 비슷하게 할 수 있다) 지금 내가 만난 문제는 이렇다. 일단 원본 텍스트가 다음과 같다. uniprotkb:P47068|intact:EBI-3437 이 상황에서 위의 붉은 색으로 표시한 문자열(실제로는 db 의 ID)을.. 2011. 2. 24.
'builtin_function_or_method' object is unsubscriptable 다음과 같은 에러가 났다. TypeError: 'builtin_function_or_method' object is unsubscriptable 환경 : python 2.6.6 on Windows7. 전체 traceback 은 다음과 같다. Traceback (most recent call last): File "CD57_scatter_plot.py", line 121, in main(); File "CD57_scatter_plot.py", line 117, in main process(f, module2customgene); File "CD57_scatter_plot.py", line 58, in process if module2customgene.has_key[all_module[0]] == True.. 2010. 12. 16.
vector를 sort 한 이후 문제가 생길 때 자신이 만든 비교함수(binary predicate)를 이용하여 vector 를 비교를 하고자 했는데 에러가 난 상황. 이 경우 주로 sort 를 두 번째 하려고 할 때 에러가 발생. 그렇다면 binary predicate 가 잘못 정의되었을 가능성이 있다. 환경 : Visual C++ 6.0 on Windows XP SP3 (급해서 일단 VC 6.0 으로 작업. 나도 VC 2010 있다. -_-;;;) 디버그 모드로 실행시켰을 때, 다음과 같은 에러가 났다. Access violoation. 이 에러는 일반적으로 접근하지 말아야 하는 메모리를 접근했을 때 나타나는 에러로, release mode 라면 다음과 같은 친근한(?) 에러 메세지를 볼 수 있다. 다시 debug mode로 실행시켜서 call s.. 2010. 11. 30.