비주얼 스튜디어 디버깅 방법을 알려주세요...

비주얼 스튜디어 디버깅 방법을 알려주세요...

작성일 2003.11.25댓글 1건
    게시물 수정 , 삭제는 로그인 필요

비주얼스튜이오 6.0에서 C 프로그램을 하는데 있어서
프로그램 변수들이 값이 제대로 들어 가는지 알아보고자 합니다.
그런데.. 기존에 default로 나오는 시트>를 추가 하는 방법을
알고 싶습니다.


#비주얼 스튜디오 #비주얼 스튜디오 코드 #비주얼 스튜디오 2022 #비주얼 스튜디오 코드 한글 #비주얼 스튜디오 2019 #비주얼 스튜디오 코드 사용법 #비주얼 스튜디오 사용법 #비주얼 스튜디오 c언어 #비주얼 스튜디오 파이썬 #비주얼 스튜디오 단축키

profile_image 익명 작성일 -

VC++은 디버깅에서 가장 강력함을 보입니다. VC++의 IDE에서 사용할 수 있는 디버깅 테크닉 몇개를 소개해 보죠.
VC++에서 사용할수 있는 디버깅 테크닉은 크게
1. Logging
2. Tracing
3. Watching
이 세가지가 있습니다.

1. Logging
일반적인 log file을 생각하시면 됩니다. 프로그램 수행시 필요한 부분마다 특정한 메시지를 파일에 기록하는 코드를 삽입하여 프로그램 수행이 끝나거나 비정상적으로 종료되면 log file에 기록된 내용을 분석하여 어느 부분에서 어떤 일을 처리하다가 프로그램이 죽었는지를 알아내는 것이죠.
이를 위해서는 일반적인 File IO를 그대로 사용할 수 있습니다. C만 사용하신다면 표준 IO스트림 함수는 모두 로그 기록용으로 사용할 수 있으며, C++에서도 역시 표준 IO스트림 객체를 모두 로그 기록용으로 사용할 수 있습니다. 단, 표준 IO스트림은 buffered IO이므로, 프로그램이 비정상적으로 종료된다면 버퍼에 남아있는 출력 메시지가 미처 파일에 기록되지 못하고 프로그램이 죽어버리는 경우가 발생할 수 있으므로, 메시지 하나를 파일에 기록할때마다 flush를 해주어야 소기의 목적을 달성할 수 있습니다.
C의 IO스트림 함수의 경우는 fflush()함수로, C++의 ofstream객체라면 endl, 혹은 flush 매니퓰레이터를 사용하여 IO버퍼를 비워내고 파일에 강제로 쓰게 할 수 있습니다.
만약 프로그램수행시 x라는 변수의 값을 계속 추적하고 싶다면,
C에서라면
fprintf( logfile, "value of x : %d\n", x ); fflush( logfile );
C++에서라면
ofstream logfile( "filename" );
logfile 등을 사용하여 로그를 남길 수 있습니다.

그밖에도 VC++에서는 일반적인 file IO보다 좀 더 편리한 리포팅 기능을 제공하는데요, 파일에는 VC++의 출력창에 메시지를 출력할 수 있는 CRT함수를 제공하고 있습니다. 간단한 메시지출력은 _RPTn() 매크로를 사용하실 수 있습니다. 여기서 n은 _CrtDbgReport() 함수에 들어가는 인자의 갯수를 나타내는 정수입니다. _RPTn()매크로는 printf()함수의 사용법과 비슷합니다. 예를 들어, 위의 예와 같이 x라는 변수의 값을 추적하고 싶다면,
_RPT1( _CRT_WARN, "value of x : %d\n", x ); 라고 하시면 되며,
x,y 두개의 변수를 추적하고 싶다면,
_RPT2( _CRT_WARN, "value of x : %d, y : %d\n", x, y ) 라고 하면 됩니다.
혹은 인자의 갯수를 적는 것이 귀찮다면 _CrtDbgReport()함수를 직접 호출하셔도 됩니다만, _CrtDbgReport()함수는 인자가 최소 5개이므로 사용하기 번거로운 면이 있습니다. _RPTn()계열의 매크로가 사용하기 적절할 겁니다.

그밖에도 파일에는 여러가지 디버깅용 헬퍼 펑션들이 많이 정의되어 있으므로 MSDN등을 찾아보시면 많은 도움을 얻을 수 있을 겁니다. CRT Debug 계열 함수는 모두 VC++ IDE의 아래쪽에 있는 "Debug"창으로 메시지를 출력해 주므로 편리하게 쓸 수 있습니다.

2. Tracing
트레이싱은 프로그램을 사용자가 원하는 단위만큼씩 끊어서 수행하는 것을 말합니다. 예를 들어, "100라인까지만 수행하고 101라인은 수행하지 말고 기다려라" 라든지, 혹은 "현재 위치에서 다음 라인의 명령만 수행하라"라는 식으로 프로그램의 실행을 사용자가 컨트롤하는 것을 말합니다.
트레이싱을 위해 모든 디버거에는 break point를 설정할 수 있게 되어 있습니다. break point는 프로그램이 수행되다가 반드시 멈춰야만 하는 지점을 설정합니다. 예를들어, 100라인에 브레이크 포인트가 설정되어 있다면, 프로그램은 99라인까지를 실행하고 100라인을 실행하기 직전에 프로그램의 수행을 일시적으로 멈추게 됩니다. 다시 사용자가 실행하도록 명령을 내리면 그 다음 100라인부터의 수행을 계속하게 됩니다.

VC++에서는 트레이싱을 위한 펑션키들이 정의되어 있습니다.
F9 : 소스코드에서 현재 커서가 가리키는 위치에 break point를 설정합니다.
F5 : 프로그램을 실행하여 break point를 만나기 전까지 계속 수행합니다. 현재 break되어 있는 상태라면 다음 브레이크 포인트를 만나기 전까지 다시 수행을 계속합니다.
F10 : 프로그램을 프로그램 소스코드의 한 문장씩 실행합니다. 이때 함수호출 역시 그냥 한 문장으로 처리하여 수행합니다. 한문장을 실행하고 멈춘 다음에는 브레이크가 걸린 상태와 같습니다.
F11 : 프로그램을 소스코드의 한 문장식 실행하지만 함수호출을 할때는 그 함수의 내부로 들어가서 다시 한문장씩 수행합니다.

트레이싱을 하면 프로그램의 흐름이 원하는 대로 되고 있는지 아닌지를 쉽게 알 수 있습니다.

3. Watching
Watching은 프로그램이 실행되면서 프로그램에서 사용하는 변수나 메모리, 레지스터의 값을 보여주는 기능을 말합니다.
기본적으로 VC++에서는 몇가지의 watch 윈도우를 제공합니다.
1) Register : CPU의 레지스터의 값을 보여줍니다. 각 레지스터의 기능은 인텔 CPU의 테크니컬 리퍼런스를 참조하시면 됩니다.
2) Memory : 원하는 주소의 메모리위치에 들어있는 값을 보여줍니다. 포인터변수가 가리키는 위치에 실제로 들어있는 값을 보거나 커다란 배열의 내부 구성의 변화를 추적할 때 좋습니다.
3) this : C++을 사용한다면 현재 객체의 멤버변수에 들어있는 값을 보여줍니다.
4) Local : 현재 수행중인 함수에서 선언된 로컬 변수의 값을 보여줍니다.
5) Watch : 사용자가 변수명을 지정한 변수의 값을 보여줍니다. 예를들어, f()라는 함수 안에서 x라는 변수를 사용하고 있다면 Watch창에 x라고 입력하면 x의 값을 지속적으로 보여줍니다. 간단한 수식을 사용할 수도 있습니다. x+100이라고 입력하면 현재 x의 값에 100을 더한 값을 계속하여 보여줍니다
6) Auto : 현재 프로그램이 수행중인 위치에서 이전 문장과 지금 문장에서 사용하는 변수의 값을 보여줍니다.
7) Call Stack(Calling Context) : 함수호출이 어떤 경로로 이루어졌는가를 보여줍니다. 즉, main()함수에서 f1()을 부르고, f1()에서 f2()를 불렀다면, 이렇게 main -> f1 -> f2의 호출 순서를 보여줍니다.

단, VC++의 Watch 윈도우를 사용하여 값을 보려면 프로그램의 수행이 반드시 브레이크 되어 있어야 합니다. 즉, VC++의 tracing 기능과 함께 사용해야 하는 기능입니다.

비주얼 스튜디오 2019 안드로이드 디버깅

비주얼 스튜디오 2019에서 안드로이드로 디버깅 하려고 했는데 할줄 모르겠어요.... 인터넷으로 찾아봐도 없어서 남은 방법은 무선디버깅인데 가능하면 방법이...

비주얼 스튜디오c++ 디버깅 할 때...

... 빨간 네모박스 안에 있는것들을 뜨게 하고싶은데 하는 방법을 찾아봐도... c++고수님들 알려주세요! 디버깅 시작 F5 메뉴 --> 디버그 --> 창 여기에 가면 질문자가 원하는 창들이...

비주얼 스튜디오 디버깅 문제!! 내공...

일전에 비주얼 스튜디오 2005를 깔았었는데 한동안 조용하다가 갑자기 요새들어서 인터넷 하다보면 디버깅... 방법은 다음과 같이 하면 됩니다. (1) Microsoft Visual Studio...

비주얼 스튜디오 디버깅

... 제가 지금 보고있는 화면 디버깅을 할수있는 방법이 있나요? 안녕하세요.. 두개 또는 복수의 인스턴스를 실행을 원하시는 것이라면 아래 그림처럼 하시면됩니다. // 처음에...

(급해요)비주얼 스튜디오 외부소스코드...

... 기타 파일 안에 있으니까 디버깅도 안되고 빌드도 안돼서 도저히 과제를 수행할 수가... 만든 비주얼스튜디오 프로젝트 폴더 안에 임의로 넣은 거구요. 이 경우에는 어떻게...

비주얼 스튜디오에서 c언어 개발하는...

전에 파이썬 공부한다고 일단 설치만 해놓았는데요 c언어를 비주얼 스튜디오에서 공부 할 수 있다고 들었습니다. 익스텐션에서 무엇무엇을 설치해야하나요? 익스텐션이라면...