반응형

디버깅시 Local 변수값이 표시되지 않는 경우

 

WinDbg로 디버깅시 Local변수가 확인이 안되는 문제가 발생했다.
아니 지금까지 계속 그랬는데 오늘 눈에 띄었다.

빌드도 정상이고 동작도 정상인데, 코드에 BreakPoint를 걸어 디버깅을 시도해 보니

멀쩡히 선언되어 있는 로컬변수가 Locals Winodw에 표시가 되지 않는것 아닌가?
dv
명령어를 쳐봐도 해당변수에 대한 정보가 없다
.
그렇다고 다 안보이는 것도 아니고 3개중 1개만 안보인다
.

-
빌드 옵션의 문제가 아닌가하는 생각에, DDK 빌드관련 페이지를 검색
...

덕분에 VC6.0을 이용해서 드라이버를 빌드할 수 있는 방법을 찾긴했으니 삽질은 아니었다
.
Go To Definition
등의 메뉴를 사용할 수 있어 편하겠다만은 빌드옵션이 넘 복잡하고

하나 하나 뜯어볼 형편이 안되는 관계로 우선은 그냥 예전방식을 사용할란다.
(
궁금하신 분은
http://www.codeproject.com/KB/applications/driverwizard.aspx를 참고하시라
.)

지금 쓰는 방식은 makefile Project를 이용해서 IDE 환경만 빌리는 방식이다 - (이 방법은 Chris Cant Windows WDM Driver Model에 보면 나와 있다
)

-
아무튼 코드프로젝트의 위자드를 사용하니, 로컬변수가 모두 표시된다
.
-
두개를 비교해본다
.
-
동일한 코드를 빌드했음에도 확실히 차이가 난다
.
-
위자드를 쓰는 방법밖에는 없는건가
?

저녁을 먹고 올라오다 불현듯, 얼마전에 본 소스의 첫째줄이 생각났다
.
#pragma optimize("", off)
이 한줄이다
.
아마도 optimize되는 과정에서 로컬변수에 대한 디버깅 정보가 빠지는건 아닐까
???

[
덧붇임: 2008.07.23]

최적화와 로컬변수 디버깅정보 누락에 대한 해답이 될만한 포스트를 찾았다.
자세한 정보는 링크를 참조
.!!!
http://blog.naver.com/process3?Redirect=Log&logNo=20036617483

---- 발췌 ----
3
번 원본 코드를 최적화 옵션을 주고 컴파일 하고 default로 컴파일 했을 때의 차이를 쉽게 알 수 있습니다.
, 최적화를 사용하면 사용하지 않는 로컬 변수등을 컴파일러가 스스로 제거하고 최소한의 코드를 만듭니다., 적은수의 OPCODE를 만들어서 CPU 부하를 줄입니다.

그러나, 최적화는 양날의 검입니다. 최적화 옵션을 사용하면 차후에 덤프 디버그 할때 FPO 등과 로컬 변수등이 제대로 나오지 않아서 디버깅 하는것이 상당히 어려워 집니다

[
덧붇임: 2009.07.21] - by 좋은향기
최적화 옵션으로 빌드할 경우,
지역변수 정보뿐만 아니라, 간단한 함수의 경우 스택프레임 구성이 생략될수 있다.

 

 

반응형

+ Recent posts