|
아마도 컴파일옵션에 Optinization이 스피드,또는 사이즈최적화로 되어 있을겁니다. 지금 빌더를 띄울수 없어서 정확한 위치를 모르겟구요.
컴파일 옵션 Optinizations에 스피드최적화나 사이즈 최적화등 두가지 옵션이 보통 있습니다. Optinization을 하도록하면 빌더가 실행순서를 지멋대로(?)결정해서 실행하거나 문자열등에 중복되는것이 있으면 지 마음대로 알아서 최적화시켜서 실행합니다. 즉 Optinization을 하면 빌더가 소스코드를 자기 마음대로 이리저리 고쳐서 실행순서를 바꿔 버리거나 데이터를 마구 섞어버리는 것처럼 보입니다. 즉 실행순서와 소스코드가 동기화가 안되는 경우가 있습니다.
뭐 그렇다고 실행이 이상해 지는것은 아니지만, 디버깅시는 Optinization을 하면 아래분 같은 문제가 필연적으로 일어날 수 있습니다. 따라서 디버깅 모드에서는 이 Optinization을 disable 시켜야 디버깅실행이 소스코드와 완전히 동기화 됩니다.
컴파일 옵션 Optinizations에서 smallist나 fastest 중에 선택되어 있다면 disable 로 바꾸고 전체 컴파일을 새로 해 보십시요. 물론 배포판 작성시는 smallist나 fastest 로 바꿔주셔도 무방합니다. 아마 이것이 build option에 debug build냐 release build 선택만으로도 자동으로 바뀌는것으로 알고 있습니다만...
궁금이 님이 쓰신 글 :
:
:
: 기존에 잘 동작하던 소스에다가 새롭게 몇부분을 추가하여 코딩하였습니다. 그리고 나서 디버깅을 하는데 이상한 현상이 발생하네요 breakpoint를 걸어놓고 step over(F8)로 디버깅을 순차적으로 진행시키면 꼭 진행이 되어야 하는 부분을 건너뛰고 다음 부분으로 넘어가버립니다.
if( flg == 1 ) {// flg = 0 으로 이부분은 건너뛰어야 합니다. switch( ch ) { case 0 : ... break ;
case 7 : ... break ; default : break ; //위에서 if문 조건에 해당 안되므로 바로 else문으로 가야 하는데 디버깅하면 여기를 진행합니다. } } else { reg_write( ... ) ;//원래, if문을 건너뛰고 바로 else문으로 들어가 여기를 시작해야 하는데 이곳을 건너뜁니다. reg_write( ... ) ;//여기부터 진행됩니다. }
이런 현상이 다른 곳에서도 똑같이 발생합니다.
이상해서 위의 break 라인에서 trace into(F7)로 디버깅해 들어가면 건너뛰는 라인으로 보였던 함수(reg_write) 안으로 들어가서 진행하고 있습니다. 도데체 왜 그러는 건가요? 아시는 분은 꼭 알려주세요 ~~ |