카테고리 없음

C언어 Release Build 디버그시 함수를 변형시키지 않도록 하려면

hyuckkim 2021. 7. 3. 07:41

printf 함수를 중간에 하나라도 넣어놓으면 일단 함수를 실행해 주기는 한다. 끝.

다음은 사족과 딴소리다 : 

디버그는 정말 좋다. 저런 알 수 없는 코드도 어떻게 동작하는지 쉽게 알 수 있기 때문이다.

빌드 모드는 Debug와 Release 모드가 있는데, 간단히 말하자면 Release 모드가 좀 더 최적화된 코드를 생성한다.

의미없는 반복은 없애고, 너무 짧은 함수는 합쳐 버리고 하는 식이다.

 

원래대로라면 Debug 모드와 Release 모드가 같은 동작을 해야 하겠지만, 최적화 때문에 함수가 다르게 실행되기도 한

다. 이 경우에 어디서 버그가 일어났는지를 확인하는 것은 매우 어려워지는데, 왜냐하면 변형된 코드가 실제로 있는 것이

아니기 때문이다.

 

그렇다면 어떻게 해야 변형된 코드에서 실행 순서를 알 수 있을까?

답은 코드가 변형되지 않게 하는 것이다.

 

저 함수는 다른 함수라고는 malloc 정도만 실행하고 나머지는 모두 값 대입이다. malloc은 아주 비용이 적은 간단한 함수이므로 이 함수 전체도 짧은 함수일 것이다. 그래서 변형되는 것이고.

여기서 비용이 매우 큰 함수를 하나 포함하면 함수가 사라지지 않을 것이다. 그래서 대충 printf를 끼워넣는 것이다.

 

이제사 느끼는건데 scanf나 _getch같은 입력 함수가 더 디버그에 좋지 않았을까. 아무렴 어때.

 

사실 저기에 버그가 있다는 걸 안 순간 이미 끝났다. 디버그는 버그가 어디에 있는지 찾아다니는 과정이니까...