'Debug'에 해당되는 글 3건

  1. 2011.09.03 Magic debug values
  2. 2011.08.18 Debug variables about STL
  3. 2010.08.20 재컴파일 없이 프로그램 실행 로직 제어하기
Debug2011. 9. 3. 16:43

자주 나오는 매직 발류들에 대해서 정리.
자세한 정보는 여기 참조.



* 0xCCCCCCCC : Allocated on stack, but not initialized
* 0xCDCDCDCD : Allocated in heap, but not initialized (Debug)
* 0xBAADF00D : Allocated in heap, but not initialized (Release)
* 0xDDDDDDDD : Released heap memory.
* 0xFDFDFDFD : automatically placed at boundary of heap memory. Should never be overwritten.




[ StackOverflow 펌 ]
* 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes
               after allocated heap memory

* 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers
* 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated
               heap memory

* 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed
               to the debugger

* 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files
* 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised
               stack memory

* 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised
               heap memory

* 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates
               the crash.

* 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before
               and after allocated heap memory

* 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory

'Debug' 카테고리의 다른 글

Debug variables about STL  (0) 2011.08.18
재컴파일 없이 프로그램 실행 로직 제어하기  (0) 2010.08.20
Posted by codevania
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
Debug2010. 8. 20. 18:35

제목이 좀 거창하게 길긴한데별거 없는 내용이다;;

 

아래와 코드를 보자1 때문에 뭐가 비었으면 그냥 리턴이다.

그런데, 이렇게 1에서 true를 반환해서 3으로 가버리도록 짠 로직이 실수라고 하자.

그러면, 지금 Shift+F5를 눌러서 2으로 가도록 코드 수정 후에 재시작 해야만 하나?

Instruction Pointer를 실시간에 바꿀 수만 있다면 어디서든지 로직의 흐름을 제어할 수 있지 않을까?

해서 알아보았다



일단 코드를 디스어셈블리로 보자


1에서, When Brakpoint Is Hit 다이얼로그를 열어 아래와 같이 설정하면 가능할까?


불행히도, 1에서 IP를 바꿔봤자 소용이 없었다. -_-

하지만, 2에서 EAX의 값을 바꾸면

1번 조건 검사를 무시하면서, 원하는 위치인 3으로 이동 가능하다.


참고로, WBIH는 매우 유용하다. 기본적인 기능이 막강한 것도 있지만

변수에 값을 대입하는 기능 외에도 함수호출도 가능하다는 사실을 아시는지??

반드시 MSDN을 참고해보길 바란다…^^;

 

'Debug' 카테고리의 다른 글

Magic debug values  (0) 2011.09.03
Debug variables about STL  (0) 2011.08.18
Posted by codevania