Debug2011. 8. 18. 00:00

Debug할 때 "Condition..." 또는 "When Hit..."에서 string::empty() 같은 함수들의 return 값은 기대한 결과를 반환하지 않는다.
그러나 변수의 값은 결과를 기대할 것도 없이 그냥 그 값이다.
그래서 "Condition..."에서 다음과 같이 함수가 아닌 변수로 조건을 걸면 문자열이 0인 경우 break가 잡힌다.
>> strWhat._Mysize == 0

이왕 정리하는 김에 유용한 것들을 기록해 본다.
(MS STL 기준. Debug mode)



string
_Bx        : 실제 인스턴스
_Bx._Buf   : 문자들이 16개 이하일 때의 저장소 (\0 포함)
_Bx->_Ptr  : 문자들이 16개 초과일 때의 포인터
_Mysize    : 문자열 길이
max_size() : 0xffffffff. 4294967295개를 넘을 수 없다.
_BUF_SIZE <= _Myres : true -> _Buf  /  false -> *_Ptr

list
_Myhead    : Head node의 포인터
_Mysize    : list의 element 개수
max_size() : 0x3fffffff. 1073741823개를 넘을 수 없다.

vector
_Myfirst   : 배열의 시작 포인터
_Mylast    : element sequence의 끝 포인터. size와 관련.
_Myend     : 배열의 끝 포인터. capacity와 관련.
_Mylast - _Myfirst : 배열의 크기. (_Mysize가 없다)


map / set
_Myhead    : 헤드 노드 포인터
_Mysize    : 크기


Note.
리스트의 erase함수는 list의 장점을 좀 못 살리고 있다.
element들을 delete하기 위해 while문을 돌면서 하나하나 삭제 한다.
음... 따로 방법이 없나? -_-;;
덕분에 Size를 바로 구할 수 있는 점은 좋지만... 누가 size를 자주 구할 목적으로 list를 사용할까?

'Debug' 카테고리의 다른 글

Magic debug values  (0) 2011.09.03
재컴파일 없이 프로그램 실행 로직 제어하기  (0) 2010.08.20
Posted by codevania