고수닷넷- 디버깅전문가님
1.요약
프로그램을 실행하는 도중에 특정한 값을 바꾸어서 함수의 흐름이 정상적으로 작동하는지를 살펴보고, 에러가 났다면, 어떤 값에서 에러가 난것인지를 재컴파일(Re-compile)없이 확인해보는 방법에 대해서 살펴보겠습니다.
2.본문
VC++ 디버거는 그 기능중에 전체 프로그램의 흐름을 이쪽 저쪽으로 뛰어다닐 수 있는 기능을 제공합니다.
Set Next Statement 라는 기능이죠. 물론 이 기능은 Run to cursor 와 같습니다.
그럼 다음과 같은 상황에서 유용하게 써먹을 수 있겠네요.
라는 함수가 있는데..
nValue 값에 따라서 어떻게 다른 값이 출력되는지를 확인해 볼려고 하는데. 보통의 경우라면 다음의 두가지 방법을 사용하겠죠.
1. Func() 함수에 비교하고 싶은 값을 여러번 넣어서 매번 컴파일해서 확인한다.
2. Func() 함수를 여러번 사용하여 확인한다.
아.. 1번과 2번.. 어떤게 더 빠를까요? 둘다 너무 비효율적입니다.
그래서 사용할 수 있는 방법이 바로 제가 위해서 설명한 'Set Next Statement' 입니다.
그럼 위의 경우에 어떻게 적용할까요?
일단 Func() 에 넣어 보고 싶은 값을 넣어서 컴파일 합니다.
그리고 Func()를 Step Over를 써서 결과를 확인해 봅니다.
다시 Func() 를 Set Next Statement 로 해놓구..
들어가는 인자의 값을 바꿉니다. 그리고 다시 Step Over를 해봅니다. 하고싶을때까지 합니다..
그리고 끝냅니다.
이런 방법을 통해서 컴파일 하지도 않고 여러번 확인 할 수 있답니다.
물론, 이렇게 직접 변수의 값을 바꾸어 사용하기 때문에 제약도 있고, 주의해야 할 점도 많습니다.
그럼 이제 예제를 통해서 직접 확인해 보도록 하겠습니다.
3.예제
Set Next Statement를 이용하여 디버깅하기
1.요약
프로그램을 실행하는 도중에 특정한 값을 바꾸어서 함수의 흐름이 정상적으로 작동하는지를 살펴보고, 에러가 났다면, 어떤 값에서 에러가 난것인지를 재컴파일(Re-compile)없이 확인해보는 방법에 대해서 살펴보겠습니다.
2.본문
VC++ 디버거는 그 기능중에 전체 프로그램의 흐름을 이쪽 저쪽으로 뛰어다닐 수 있는 기능을 제공합니다.
Set Next Statement 라는 기능이죠. 물론 이 기능은 Run to cursor 와 같습니다.
그럼 다음과 같은 상황에서 유용하게 써먹을 수 있겠네요.
void Func(int nValue);
라는 함수가 있는데..
nValue 값에 따라서 어떻게 다른 값이 출력되는지를 확인해 볼려고 하는데. 보통의 경우라면 다음의 두가지 방법을 사용하겠죠.
1. Func() 함수에 비교하고 싶은 값을 여러번 넣어서 매번 컴파일해서 확인한다.
2. Func() 함수를 여러번 사용하여 확인한다.
아.. 1번과 2번.. 어떤게 더 빠를까요? 둘다 너무 비효율적입니다.
그래서 사용할 수 있는 방법이 바로 제가 위해서 설명한 'Set Next Statement' 입니다.
그럼 위의 경우에 어떻게 적용할까요?
일단 Func() 에 넣어 보고 싶은 값을 넣어서 컴파일 합니다.
그리고 Func()를 Step Over를 써서 결과를 확인해 봅니다.
다시 Func() 를 Set Next Statement 로 해놓구..
들어가는 인자의 값을 바꿉니다. 그리고 다시 Step Over를 해봅니다. 하고싶을때까지 합니다..
그리고 끝냅니다.
이런 방법을 통해서 컴파일 하지도 않고 여러번 확인 할 수 있답니다.
물론, 이렇게 직접 변수의 값을 바꾸어 사용하기 때문에 제약도 있고, 주의해야 할 점도 많습니다.
그럼 이제 예제를 통해서 직접 확인해 보도록 하겠습니다.
3.예제
void Func(int nValue)
{
if (nValue < 0)
printf("Error");
else
printf("Thanks..");
}
int main(int argc, char* argv[])
{
// 프로그램 시작시
// User Breakpointer 를 걸어 둡니다.
__asm int 3;
// 초기에 nVal의 값이 -1 로 설정되어 있기 때문에
// Func() 함수는 Error 값을 Console Window 에 print합니다.
// 그런데. 사용자가 nVal 의 값이 정확히 0 이상이면
// Thanks 를 출력하는지를 살펴보기 위해서
// nVal 의 값을 바꾸어 다시 컴파일 해서 살펴보아야 할 수도 있는데
// 실제로 그렇게 하지 않고,
// nVal 의 값을 Watch Window 에서 바꾸어 테스트 해볼 수도 있습니다.
// 1. Watch Window 창의 띄웁니다.
// 2. nVal=10 이라고 입력합니다.
// 3. 그럼 nVal의 값이 10으로 바뀐것을 확인할 수 있습니다.
// 4. [1] 번 라인에 마우스를 놓고, 오른쪽 버튼을 눌러
// 'Set Next Statement' 를 선택합니다.
// 5. 그럼 [1]번 라인으로 cursor 가 옮겨 진것을 확인할 수 있습니다.
// 6. 다시 F10 을 눌러 Step Over를 해서 Func(nVal); 을 지나면
// 화면에 Thanks.. 라는 값이 출력된것을 확인할 수 있습니다.
// 7. 이제 Func() 함수가 정상적으로 작동하는 값을 찾을 수 있습니다.
int nVal = -1; // [1] 번 라인
Func(nVal); // [2] 번 라인
return 0;
}
"Debugging" 카테고리의 다른 글
- LastError를 보여주는 Debugging Trace Macro (0)2007/03/05
- Dll에 breakpoint 설치하기 (0)2007/02/22
- Microsoft .NET Framework SDK 디버거 설명서 (0)2007/01/22
- Set Next Statement를 이용하여 디버깅하기 (0)2007/01/22
- ATL 디버깅 정보 출력하기 (0)2007/01/22

수안이의 컴퓨터 연구실



Leave your greetings.