GDB 싱크 문제(?)

parrier의 이미지

gdb로 디버깅을 해보려고 하는데요.

list로 확인한 것과 현재 진행 중인 부분이 맞질 않네요.

step 명령으로 한 라인씩 넘어가고 있는데, 갑자기 4-5칸을 뛰어서 멈추기도 하구요.

p 명령으로 변수들을 체크하려고 하는데 선언되지 않았다는 식으로 나오는 경우도 있습니다.

list로 확인했을 때는 있는데 말이지요.

혹시 싱크가 안맞을 수도 있나요?;.;

eminency의 이미지

제 경험에 의하면 두 가지 경우 중 하나입니다.

1. 컴파일한 바이너리 이후에 소스 파일을 고쳤을 경우(이건 당연...;)
2. 최적화 옵션을 주고 컴파일한 경우(-O2, -O3등)

말씀하신 걸로는 아마 두번째 경우가 아닐까 싶네요.
그리고 if 절의 조건에 해당이 안되거나 하면 여러 줄을 뛰어넘는 경우도 있습니다.
어쨌든 최적화 옵션을 체크해 보시길...

노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5

parrier의 이미지

컴파일 옵션은 다음과 같이 주었습니다.

gcc -g test.c -I. -ldwarf -lelf

이렇게 주었습니다.

------------------------------
참고로
gcc -c test.c -g -I. -ldwarf -lelf라고 했더니

gcc: -ldwarf: linker input file unused because linking not done
gcc: -lelf: linker input file unused because linking not done

이렇게 뜨면서 에러가 나네요. ;.;

-_-v

mirr187의 이미지

-c는 컴파일만 하는 것이기 때문에

link를 제외하고 하시던가 , -c를 제외하셔야 합니다.

gcc -c test.c -g -I. -ldwarf -lelf

=> gcc -c test.c -g -I.
or
=> gcc test.c -g -I. -ldwarf -lelf

gdb관련된 부분은 붙여주시면 좀 더 이해가 쉬울거 같네요