깐우의 세상 만들기

(C++) 디버깅때는 에러가 없는데 실행시 에러가 생기는 경우 본문

Book / Study

(C++) 디버깅때는 에러가 없는데 실행시 에러가 생기는 경우

깐우 2011. 6. 7. 04:11
릴리즈 모드에서의 에러 원인

릴리즈 모드에서 나는 에러 찾기....

디버깅 모드일때는 멀쩡한데 실행 하면 에러가 난다.

아마 예외 처리의 문제인듯 하다
(http://ddoong2.com/134)

아래의 출처 사이트가 아주 유용하다.




<요약> 어플리케이션을 릴리즈 모드로 Build 할 때 디버깅 정보를 남기어서 VC++ Debugging Tool에서 디버깅을 가능하게 합니다.
이 방법을 사용하는 경우, 실제 릴리즈 실행 파일은 거의 영향을 받지 않으면서,
디버그에서 브레이크 포인터를 잡거나, Trace를 가능하게 하므로,
릴리즈모드 에서만 발생하는 버그를 잡을수 있습니다.


<추가정보>
이 방법을 사용하게 되면 _DEBUG free define으로 포함되는 디버깅 메크로는 포함되지 않으나,
Source code안으로 Step in 가능하게 하는 디버깅 정보들은 OBJ와 PDB 파일에 남게 됩니다.
이를 이용하게 되면 VC++ IDE 환경에서 source level 까지의 step in이 가능해 집니다.


<방법>
1. Project를 open한뒤 menu 'Project/Settings'를 선택합니다.
2. 'Settings For'를 'Win32 Release'로 선택합니다.
3. 'C/C++' tab에서 'category'를 'General'로 선택하고 'Program Database'로 선택합니다.
4. 'Link' tab에서 'category'를 General'로 선택하고 'Generate debug info'를 체크합니다.
5. 'Rebuild All'를 실행하여서 프로그램을 다시 빌드 합니다.

이제 디버깅 하고자 하는 위치에 브레이크포인터를 잡고 'Go'를 실행하면,
디버깅을 진행할수 있습니다.


출처: http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=277&ref=197 

http://blog.naver.com/wichid?Redirect=Log&logNo=60058989634 

http://blueasa.tistory.com/484 

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=179&ref=135 


추가 포스팅:

PLRPatternCreator.exe의 0x777932ff에 처리되지 않은 예외가 있습니다.
0xC0000005: 0xdddddde1 위치를 읽는 동안 액세스 위반이 발생했습니다. 


이런 에러가 나서 위의 내요을 찾아본것이었다...

결론적으로 어떻게 어떻게 찾았는데...

strcpy를 써서 그런거였다....

NULL까지 계산을 하는 거였으니...어디에선가 에러가 난듯...

그냥 개수로 복사하는 memcpy를 쓰는 게 정신건강에 좋겠다.

파라미터 하나 더 있더라도 확실하니까...

디버깅에는 멀쩡한데 실행 파일에 문제가 있으면 죽을 맛이니까....