C언어 (26) visual studio
visual studio 오류랑 편리하게 쓸 수 있는 디버깅 모드들
오류 모음
#_CRT_SECURE…
visual studio만의 오류?라고 볼 수도 있는 오류이다.
scanf뿐만 아니라 입출력, string 관련 함수에서도 다 이런 에러를 낸다.
실제로 이 함수들이 버퍼 오버플로우 및 기타 에러를 발생시킬 수 있는 것이 맞긴 하다.
하지만 우리가 진짜 프로그램을 만들 것도 아니고 간단하게 코드 짜는 정도로만 쓴다면 신경 쓸 것까지야..
해결 방법은 scanf_s처럼 뒤에 _s를 붙이는 방법도 있는데 이것은 다른 프로그램과 호환이 잘 안된다.
그렇기에 C4996 에러 자체를 무시하는 코드를 맨 위에 전처리기로 정의해주는 것이 간편하다.
1
#define _CRT_SECURE_NO_WARNINGS
맨 위에 그냥 쓰고 시작하자.
원래 발생시키는 에러에 대한 설명도 쓰려고 했지만 나중에 보안 글에서 자세히 쓰는게 맞는 듯 하다.
확인할 수 없는 외부 기호
처음 봤을 때 무슨 오륜지 감도 오지 않은 오류이다. 아무리 봐도 외부 참조가 없는데..
1
2
3
4
5
6
#include <stdio.h>
int man() {
int a;
printf("%d", a);
return 0;
}
그렇게 코드를 하나하나 보다보면 단순한 오타가 났을 때 이런 오류가 발생한다.
main에 오타가 있다거나 함수에 오타가 있다거나 하는 거니까 코드를 한 번 다시 보면 된다.
LNK1104 파일을 열 수 없습니다.
이것 역시 이유를 찾기가 어렵다. 왜냐하면 코드는 정상적일 것이기 때문이다.
검색하면 바로 해결 방법이 뜨는데, 이전에 실행한 프로그램이 제대로 종료가 되지 않아서
메모리 상에 남아있거나 돌아가고 있을 때 발생하는 오류이다.
밑에 프로그램 창이 띄어져 있으면 끄면 되지만 아무것도 없는데도 이 오류가 발생할 수 있는데
그럴 때는 실행 중인 프로그램을 찾아서 강제 종료 해야 한다.
CMD를 실행하고, tasklist 명령어를 실행하면 현재 실행중인 목록이 뜬다.
컴파일 하던 실행 파일을 찾은 다음 옆에 있는 8720과 같은 숫자가 PID이다.
1
taskkill /f /pid 8720
이렇게 cmd에 명령어를 넣으면 강제종료가 되고, visual studio로 돌아가 실행하면 정상적으로 된다.
visual studio에서 발생하는 오류는 이 3종류가 거의 대부분인 것 같다.
그래도 나름 코딩 학원 강사를 1년 좀 넘게 하면서 수많은 코드를 봤는데 다 이런 오류들이었다.
이렇게 경험이 쌓이고 오류가 떠도 당황하지 않게 성장한 것 같아요.
디버깅
visual studio가 처음 C언어를 배우는 사람에게 좋은 점은 친절함이다.
에러를 자세히 알려주고, 실수 한 것도 바로 알려주고, 또 디버깅도 쉽게 할 수 있다.
f11을 누르면 디버깅 모드로 실행할 수 있다.
밑에를 보면 현재 실행되는 단계에서 선언된 변수들의 값이 있고 화살표가 현재 단계이다.
위에 화살표에 한 줄 씩 실행하기 버튼을 통해서 코드를 실행하며 변수의 값이 변화하는 걸 볼 수 있다.
처음 코드를 짜본다면 프로그램의 흐름을 따라가기 힘들 수 있기에 이런 디버깅 기능은 유용하다.
중단점(breakpoint)이라는 기능도 있는데 실행할 때 중단점 전까지만 실행을 하고 멈추는 것이다.
이것도 잘 이용하면 원하는 곳까지 실행을 쭉 한 다음 디버깅을 해볼 수 있다.
이렇게 친절하게 디버깅을 해주는 프로그램은 거의 없기에 자주 사용해보면 좋을 것 같다.
이렇게 visual studio의 오류와 디버깅에 대해 적어봤다.
그럼에도 호환성 측면이나 숙련이 됐다면 vs code가 좀 더 편하다고 생각이 된다..
visual studio로 충분히 C언어에 익숙해졌다면 vs code로 환경을 바꾸는 것을 추천한다.
계획은 1월 중반까지 다 쓰는 것이었는데 조금씩 미루다보니 이제야 겨우 끝냈다.
C언어를 시작으로 블로그를 계속 가꾸어 나가자.