gdb로 디버깅을 해보려고 하는데요.
list로 확인한 것과 현재 진행 중인 부분이 맞질 않네요.
step 명령으로 한 라인씩 넘어가고 있는데, 갑자기 4-5칸을 뛰어서 멈추기도 하구요.
p 명령으로 변수들을 체크하려고 하는데 선언되지 않았다는 식으로 나오는 경우도 있습니다.
list로 확인했을 때는 있는데 말이지요.
혹시 싱크가 안맞을 수도 있나요?;.;
제 경험에 의하면 두 가지 경우 중 하나입니다.
1. 컴파일한 바이너리 이후에 소스 파일을 고쳤을 경우(이건 당연...;) 2. 최적화 옵션을 주고 컴파일한 경우(-O2, -O3등)
말씀하신 걸로는 아마 두번째 경우가 아닐까 싶네요. 그리고 if 절의 조건에 해당이 안되거나 하면 여러 줄을 뛰어넘는 경우도 있습니다. 어쨌든 최적화 옵션을 체크해 보시길...
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
컴파일 옵션은 다음과 같이 주었습니다.
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
-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관련된 부분은 붙여주시면 좀 더 이해가 쉬울거 같네요
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
제 경험에 의하면 두
제 경험에 의하면 두 가지 경우 중 하나입니다.
1. 컴파일한 바이너리 이후에 소스 파일을 고쳤을 경우(이건 당연...;)
2. 최적화 옵션을 주고 컴파일한 경우(-O2, -O3등)
말씀하신 걸로는 아마 두번째 경우가 아닐까 싶네요.
그리고 if 절의 조건에 해당이 안되거나 하면 여러 줄을 뛰어넘는 경우도 있습니다.
어쨌든 최적화 옵션을 체크해 보시길...
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
최적화 옵션은 주지 않았구요.
컴파일 옵션은 다음과 같이 주었습니다.
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
-c는 컴파일만 하는
-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관련된 부분은 붙여주시면 좀 더 이해가 쉬울거 같네요
댓글 달기