백준 알고리즘을 풀다보니 이런 말이 있었다.
"이렇게 했더니 맞고 이렇게 했더니 틀린다"가 아니라 assert문으로 확실하게 확인해 주시기 바랍니다.
문제를 풀다보면 테스트케이스에서는 다 맞는데 막상 제출하면 틀리는 경우가 있다. 이 경우 문제에 오류가 있나 라고 생각하기 쉬운데 사실 문제에 오류가 있는것이 아니라 내 코드가 test case에서만 통과되는거지 다른 숨겨진 case에 대해서는 실패하는 경우이다.
즉, 내 소스에 디버깅이 확실히 되어있지 않다는 점이다.
확실하게 디버깅하기 위해서는 assert문으로 확실하게 확인해 달라고 하였는데 과연 assert가 무엇일까?
assert란 개발자들이 디버깅을 빠르게 하기위한 도구이다. 즉, 에러 검출용 코드이지 코드를 다 완성하고 동작할때 돌아가는 함수가 아니다.
assert는 log보다 더 효율적으로 사용될 수 있는데 이유는 버그가 발생한 위치, call stack등 여러 정보를 알 수 있기 때문이다.
또한 assert는 디버깅용 함수이기 때문에 Release 모드에서는 동작하지 않고 디버그 모드에서만 동작한다.
assert에 대한 구체적인 설명과 사용법은 다음을 참조하자.
https://blockdmask.tistory.com/286
[C언어/C++] assert 함수에 대해서 : 디버깅을위한, 더 안전한 코드를 위한 오류 검출 방법
1. C/C++ assert함수란? - 간단하게 말하자면 assert 함수는 디버깅 모드에서 개발자가 오류가 생기면 치명적일 것이라는 곳에 심어 놓는 에러 검출용 코드입니다. - 예를들어서 int score 가 음수가 나오면 절대..
blockdmask.tistory.com
https://dojang.io/mod/page/view.php?id=764
C 언어 코딩 도장: 85.21 assert 사용하기
assert 매크로는 assert.h 헤더 파일에 정의되어 있으며 정해진 조건에 맞지 않을 때 프로그램을 중단합니다. 즉, assert에 지정한 조건식이 거짓(false)일 때 프로그램을 중단하며 참(true)일 때는 프로그램이 계속 실행합니다. 단, NDEBUG 매크로가 정의되어 있으면 assert는 무시됩니다. 그러므로 Visual Studio에서는 Debug 모드에서만 동작하며 Release 모드에서는 동작하지 않습니다. 예를 들어 포인터가 NULL
dojang.io
'Programming > C,C++' 카테고리의 다른 글
[C++ 소켓 스레드통신] 스레드클래스를 직접 만들고 소켓통신 구현하기 (0) | 2020.03.30 |
---|---|
[C/C++] 배열과 벡터 속도차이 비교 테스트 (0) | 2020.03.22 |
[C++] 2차원벡터 사용 예시 (0) | 2020.03.08 |
[C/C++, 시간측정법]C언어(visual studio) 시간측정법 (0) | 2020.02.11 |
[C/C++]C언어 소스 최적화(시간효율, 메모리효율성 증대) (0) | 2020.02.11 |