▲ 디버깅에 도움이 되는 assert에 대해 알아보겠습니다. assert를 쓰기 위해선 헤더를 먼저 달아야 합니다.
여러 클래스에서 사용한다면 보통 미리컴파일된 헤더에 넣어둡니다

 

 

▲고맙게도 터져준 모습입니다


먼저 사용법입니다. 정말 간단합니다

assert(참조건)   //그냥 지나감
assert(거짓조건) //프로그램 터짐

assert는 디버깅모드에서만 작동하며, 릴리즈라던지 실제 프로그램에선 무시되는 코드입니다.

 

코딩을 하다가 버그가 나면 제발 차라리 터졌으면 좋겠다 하는 마음이 들 때가 있을겁니다. 
프로그램이 안터지고 의도치 않은 방향으로 계속 흘러가는게 더 무섭습니다.


이제 코딩부분을 보겠습니다. 먼저 쉬운 예시입니다

▲assert 속에는 참조건만 들어와야하니, 양수 조건을 걸어두었습니다.

 

▲Map에는 키값이 하나만 존재한다는 사실을 이용해서 count기능을 활용해
컨테이너에 값 추가나 삭제에 assert를 활용하였습니다

 

▲assert로 인해서 프로그램이 터지면 괄호 속 내용이 표시되는데,
조건문만 떠서 답답할 수도 있습니다. 이제 원하는 메세지도 같이 띄워보도록 하겠습니다

 

▲괄호 내의 내용이 참이면 그냥 지나가는데, assert(여기) 에 문자열을 그냥 적어넣으면 참으로 인식합니다
해당 내용을 이용해서 &&엔드연산을 통해 [원하는 참거짓 && "문자열"] 이런식으로 구성해보겠습니다

 

▲ 터뜨려 보니 [조건문 + 내가 적은 문자열] 이 정상출력된것이 확인되었습니다.

 

▲조금 더 활용하여 도달하면 안될곳에도 assert를 항시 false 조건을 걸어 터지게 해준 케이스

 

 

▲ 보통 일반적인 사용예시들


 

▲STL의 컨테이너중 Map 을 예로 들어보겠습니다. 
Map은 본인 컨테이너에 없는, 존재하지 않는 내용을 반환하려하면, 
Map에 null객체를 할당해 만들어서 넣은 후 null을 반환합니다. Map컨테이너의 크기도 하나 늘어나고 
원치 않는 데이터가 들어갔기에 자칫 다음 사용시엔 의도치 않는곳에서 null로 터질 수 있습니다.

 

assert를 이용해 위 사건을 미연에 방지하였습니다


프로그램이 제발 터졌으면 하고 바라거나 이미지가 nullptr 들어오는지 궁금한다던지,
왜 내 캐릭터 HP가 자꾸 1로 변한다던지 궁금할때,
프로그램에 의심되는곳에 assert 조건문을 주어 디버깅을 더 원할하게 해보아요

'정보들 > C,C++ 관련' 카테고리의 다른 글

inline 함수 vs 매크로 함수  (0) 2020.06.23
C++의 캐스팅 4가지  (0) 2020.06.23
bool vs BOOL?  (0) 2020.06.23
push_back vs emplace_back  (0) 2020.06.23
C++ STL 종류들 및 사용처  (0) 2020.06.23

+ Recent posts