Visual Studio.NET 2003 환경에서 개발 중에 아주 골때리는 일이 발생하였다.
GetCommConfig 함수를 사용하는 코드였는데,
WindowsXP 에서는 잘 되는데,
Windows2000 의 'Debug' 모드에서만 저 함수가 Error를 return 하는 것이다.(실행이 안되거나 build가 안되는 것도 아니고..)
일단 Debug와 Release의 설정 차이일 것으로 생각되어, 설정을 비교하면서 다른 옵션을 같도록 바꿔 보면서 체크해 봤더니..
구성 속성 -> C++ -> 코드 생성 -> 기본 런타임 검사를 기본값 또는 초기화 되지 않은 변수..로 바꿔 봤더니 제대로 된 값을 return 하는 것이다.
(모두, 또는 스택 프레임..으로 하면 에러 발생)
그래서 MSDN에서 스택 프레임(/RTCs) 관련 내용을 찾아봤더니 다음과 같았다.
영어 해석이 잘 안되어서 내용이 확실치는 않다;;;
스택 frame의 run-time 에러 체킹을 활성화한다.
1) local variable을 nonzero 값으로 초기화한다. 값 초기화와 관련 있는 것 같은데, 어떤 경우에는( 프로그램이 스택 area를 사용한 경우라고 하는데...자세하지 않음) 0으로 초기화되지 않고 이와 관련해서 문제가 생기는 경우가 있다고 하는 것 같다. 그래서 이런 경우의 에러를 찾기 위해서 이렇게 해 주는 것 같다.
2) 배열과 같은 local variable의 overrun이나 underrun을 찾는다. 이 내용은 잘 모르니 pass
3) stack pointer verification을 수행하여 stack pointer corruption을 찾는다. stack pointer corruption은 함수 포인터나 dll 함수 선언 등에서 calling convention을 잘못 썼을 때 발생한다.
뭐 대충 stack 관련 변수/함수를 체킹해 주는 것 같은데, 요 옵션이 먼 영향을 끼치는 건지는 잘 모르겠다.
일단 옵션을 끄고 사용하고, 시간이 되면 변수 초기화 부분을 함 뒤져봐야 겠다.
GetCommConfig 함수를 사용하는 코드였는데,
WindowsXP 에서는 잘 되는데,
Windows2000 의 'Debug' 모드에서만 저 함수가 Error를 return 하는 것이다.(실행이 안되거나 build가 안되는 것도 아니고..)
일단 Debug와 Release의 설정 차이일 것으로 생각되어, 설정을 비교하면서 다른 옵션을 같도록 바꿔 보면서 체크해 봤더니..
구성 속성 -> C++ -> 코드 생성 -> 기본 런타임 검사를 기본값 또는 초기화 되지 않은 변수..로 바꿔 봤더니 제대로 된 값을 return 하는 것이다.
(모두, 또는 스택 프레임..으로 하면 에러 발생)
그래서 MSDN에서 스택 프레임(/RTCs) 관련 내용을 찾아봤더니 다음과 같았다.
영어 해석이 잘 안되어서 내용이 확실치는 않다;;;
스택 frame의 run-time 에러 체킹을 활성화한다.
1) local variable을 nonzero 값으로 초기화한다. 값 초기화와 관련 있는 것 같은데, 어떤 경우에는( 프로그램이 스택 area를 사용한 경우라고 하는데...자세하지 않음) 0으로 초기화되지 않고 이와 관련해서 문제가 생기는 경우가 있다고 하는 것 같다. 그래서 이런 경우의 에러를 찾기 위해서 이렇게 해 주는 것 같다.
2) 배열과 같은 local variable의 overrun이나 underrun을 찾는다. 이 내용은 잘 모르니 pass
3) stack pointer verification을 수행하여 stack pointer corruption을 찾는다. stack pointer corruption은 함수 포인터나 dll 함수 선언 등에서 calling convention을 잘못 썼을 때 발생한다.
뭐 대충 stack 관련 변수/함수를 체킹해 주는 것 같은데, 요 옵션이 먼 영향을 끼치는 건지는 잘 모르겠다.
일단 옵션을 끄고 사용하고, 시간이 되면 변수 초기화 부분을 함 뒤져봐야 겠다.
