본문 바로가기
[ Program ]/c#스터디

49. 디버깅

by 관이119 2021. 10. 9.

프로그램을 하면서 한번에 코드가 완벽하게 작동하게 만들기는 거의 불가능하다.

물론 간단한 출력프로그램 같은 경우는 그럴일이 없겠지만 대부분의 경우 디버깅이 필요하다.

일단 기본적인 디버깅 방법을 알아보자.

 

그림1

먼저 그림1에서처럼 위쪽 솔로션 구성이 Debug 상태인지 확인한다.

그후 아래 디버그해서 확인할 라인의 앞쪽부분(빨간색동그라미) 를 클릭하면 빨간색 원이 생긴다.

혹은 디버그할 라인을 선택하고 F9 를 누르면 (기본설정일경우) 클릭한것과 마찬가지로 빨간색 원이 생긴다.

빨간색원을 브레이크포인트라고 부르는데 브레이크 포인트는 설정되는 위치가 있고 안되는 위치가 있다.

예를 들면 위그림같은경우 35라인에 브레이크 포인트를 찍으면 거기찍히지 않고 중괄호가 시작되는 36라인에 브레이크 포인트가 찍히게 된다.

아무의미없는곳에는 찍히지 않는것이다.

그리고 여러곳에서 브레이크포인트를 사용하는것도 가능하다.

37라인에 찍고 38라인에도 찍고 42라인에도 찍고 이런식으로 동시에 여러군데씩 찍어두고 단계별로 브레이크를 진행 할 수도 있다.

 

위와같이 되면 디버깅할 준비가 끝났는데 이상태에서 F5 를 누르거나 위쪽에 시작을 누르면 디버깅을 할 수 있다.

 

 

그림2

 

그림2는 실제 프로그램이 실행된뒤 해당디버깅위치 (위의경우 이전장에서 만든 계산기의 = 버튼을 눌렀을때 디버그 걸어둠) 에 걸렸을때를 표시했다.

디버깅이 되면 왼쪽 빨간색원안에 화살표가 생기는데 여기서부터 한줄씩 움직이면서 디버깅하거나 현재 라인의 함수내에 들어가서 디버깅을 할수도 있다.( F10 , F11 을 눌러보자 )

그리고 화살표를 드래그해서 원하는 줄에서 시작하게 만들수도있다.

개인적으로 여러가지 연습해보기 바란다.

 

그리고 왼쪽아래 조사식에는 현재 상태에서 변수에 어떤값이 들어있는지 테스트할때 유용하게 사용할 수 있다.

'검사할 항목추가' 를 눌러보면 새롭게 항목을 추가할수 있는데 저기 이름 부분에 어떤 항목이 들어와도 좋다.

문자열,정수형, 심지어 object 까지 입력할수 있는데 지금 위 그림2에서도 이름에 cal_text.Text 를 입력해 놓은것을 볼 수 있다.

이름에 대상을 입력하면 값에 해당 대상의 내부내용이 표시되는데 for 처럼 반복문에서 반복 변수를 i 라고 했을때 i 를 입력해두면 F10,F11 로 반복문이 한번씩 실행될때마다 i 의 값이 바뀌는것도 확인할 수 있다.

 

오른쪽아래 호출 스택같은경우는 프로그램이 어디로 흘러왔는지 알수 있는것인데 아래에 있는것들을 클릭하면 어디를 타고와서 어떻게 실행중이다 라는것을 알 수 있다.

그리고 호출스택 영역 아래부분에 몇가지 탭이있을텐데 그곳들도 개인적으로 살펴보자. 

 

그림3

 

또한 디버깅중 그림3처럼 객체위에 마우스를 올리면 작은 팝업창이 뜬다.

그림3처럼 팝업창이 뜨면 앞쪽에 보이는 화살표에 마우스를 올리면 창이 확장되는데 거기서 객체에 대한 더 자세한 정보를 볼 수도 있다.

그렇게 하다가 필요하다 싶을때 다시 F5 를 누르면 다음 브레이크포인트 까지 프로그램이 실행되게 된다.

이렇게 특정 지점까지 정상실행되는지 확인하면서 프로그램의 완성도를 높여간다.

 

다음으로 프로세서에 디버깅하는 법을 알아보자.

 

그림4

 

그림4같은경우는 프로그램을 따로 띄우고 뒤에 소스를 열어둔 상태다.

 

그림5

 

그림5처럼 프로세스에 연결을 눌러보자.

 

그림6

 

현재 프로세스 이름을 따로 정하진 않은 상태라 저런형태이지만 아래로 내리다보면 그림6처럼 해당 프로그램을 찾을수 있다.

그러면 프로그램을 선택하고 연결을 눌러보자.

 

그림7

 

그러면 그림7처럼 프로세스는 따로 떠있고 거기에 디버깅으로 연결한상태가 된다.

물론 이상황에서는 아무 의미가 없어 보일수 있지만 여러 프로세스가 떠있는상태라거나 그런경우에는 이렇게 디버깅 할수 밖에없다.

그리고 브레이크 포인트가 빨간원이 아닌 중간이 비어있는경우가 있을수도 있는데 그 경우는 현재 vs의 소스 상태와 실제 실행되고 있는 프로세스의 내부 내용이 다르다는 의미이다.

그런경우는 다시 빌드해서 프로세스에 연결하면 되겠다.

 

 

그외 특정피씨에 원격으로 연결해서 원격디버깅하는 방법도 있다.

원격 디버깅을 하려면 따로 툴이 필요한데 인터넷에서 찾아서 받을수도 있고 내PC에 비쥬얼스튜디오가 깔려있다면(당연히 깔려있겠지만) 찾아서 원격피씨에 설치해 줄 수 있다.

 

그림8

 

그림8처럼 내피씨에 비쥬얼스튜디오가 깔린 드라이브로 가서 Remote Debugger 로 검색하면 해당 폴더를 찾을수 있다.

그러면 저 폴더를 통채로 원격PC에 넣어서 실행을 해주면 된다.

 

그림9

 

그림9에서 처럼 해당 비트 폴더에 들어가서(원격PC) 저파일을 실행시켜주면된다.

 

그림10

 

그러면 해당PC에 그림10과 같은 창이 뜨게되는데 저상태로 두고( 디버깅할 프로그램은 실행 되있어야한다. )  내PC로 돌아와서 디버그를 누른다.

위에서 프로세스에 연결하던것과 동일한 상태인데 위쪽 연결대상만 선택해주면 된다.

 

그림11

그림11에서 처럼 찾기를 누르면 원격연결이라는 팝업창이 뜨는데 그중 대상을 선택하면 그 PC에 있는 프로세스들이 아래에 표시되게 된다.

그중 디버깅할 프로세스를 선택하고 디버깅을 진행하면 된다.

 

 

***숙제 : 위에서 설명한 디버깅방법들을 직접한번씩 실행해보자.

'[ Program ] > c#스터디' 카테고리의 다른 글

51. 쓰레드1(Thread)  (0) 2022.02.04
50. 전처리기 / 편의사항  (0) 2021.10.29
48. 계산기 만들기  (0) 2021.10.09
47. 유즈케이스  (0) 2021.10.09
46. 엑셀파일읽기  (0) 2021.10.09

댓글