글

라벨이 디버깅인 게시물 표시

[VS/디버깅]Detected memory leaks!(메모리의 누수가 감지되었습니다!)

Detected memory leaks!  Dumping objects -> {10} normal block at 0x037EA8C8, 20 bytes long.  Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  이 메세지는 디버그모드로 프로그램이 종료될때  메모리의 누수  나타나는 메세지다. 여기서 {10}은 누수가 나타난 부분메모리 할당된 메모리 영역의 번호를 의미한다. 하지만, 일반적인 프로그래머가 이 메세지를 보고 어디서 난지 확인 하는건 어렵다. 그래서, VS에서는 디버그모드에서 특정 할당메모리에 중단점을 설정하는 함수가 있다. _CrtSetBreakAlloc(10); 메인프로그램의 시작위치에 함수를 넣고 위 메세지에 나타난 메모리 번호를 넣어주면된다. 그러면 디버그로 실행했을때 해당 메모리가 할당된후 중단이 되는데,  여기서 스택을 따라 이동해서 확인해보면  동적으로 할당해  문제가 발생된 메모리 를 알수있다. *메모리의 누수: 메모리가 동적으로 할당된경우 메모리가 자동으로 해제되지않는데, 이때 프로그래머가 임의적으로 메모리를 해제하지않아서 프로그램이 종료된뒤에도 해당 메모리가 남아있는 현상을 말한다. *추가 예제: #include <crtdbg.h> //필요해더파일 #include <stdio.h> void main() { _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //디버그에 메모리립이 생기면 프로그램이 종료되고 알려줄때 사용됨. _CrtSetBreakAlloc(10); //10번 메모리가 할당될때 중단점을...

[VS]중단점이 현재 적중되지 않습니다. 소스 코드가 원래 버전과 다릅니다.

이경우는 검색결과 몇가지 상황이 있엇다. 1.프로젝트 설정(디버깅정보,최적화옵션) 2.sou파일 삭제 후 다시 빌드 3.파일저장형식변경(유니코드) 4.소스를 수정하고 컴파일후 다시 원래 대로 돌려 컴파일 5.소스 파일이 원래 버전과 정확하게 일치해야 함 옵션끄기                1~3방법은 적용해보고 확인해보았지만 변화가 없었다. 그런데 4번방법은 됬다. 해결상황과 이전까지 이런일이 일어난 상황을 종합해보면 디버깅중에 소스가 수정되고 실행취소로 원래대로 돌리면, 이전에 컴파일된 소스에 VS는 컴파일이 완료된걸로 착각하지만 실제로는 소스는 바뀌었지만 바뀐소스가 빌드되지않아 발생하는 문제로 추정된다. 참고로 5번도 해결방법이긴하나 근본적인 해결책이 아니므로 되도록이면 이전에 해결책들 이후에도 발생한다면 해보는것이 좋을것이다. 참조:  http://blog.naver.com/PostView.nhn?blogId=sardian&logNo=40112367472

[링크]디버깅 팁

http://www.gamedevforever.com/282