가능하면 메모리 디버거를 사용하시는 것이 좋습니다. printf와 gdb 만으로 찾아다니면 "발생한 현상"이 아닌 숨어있는 -- 당장 현재 환경에서는 잘 작동하지만 모듈을 추가하거나 다른 시스템에서 컴파일했을 때 문제가 생겨도 이상할 것이 없는 잘못들을 찾아내기가 어렵습니다. 웬만큼 메모리와 버퍼 크기를 다루는 데에 이골이 난 경우라 아니라면 문제가 되는 코드를 보면서도 깨닫지 못하는 경우가 대부분입니다.
반면 메모리 디버거를 사용하면 일부러 printf를 사용해서 탐색범위를 줄여나가는 귀찮을 일을 할 필요가 없이 잘못된 위치를 바로 찾아주기 때문에 + 잠재적으로 문제의 가능성이 있는 위치를 근본적으로 찾아주기 때문에 좋습니다.
아무리 전문가이고 경험이 많아도 포인터와 스트링 함수를 많이 사용해 작성한 코드에서 문제가 없다고 자신있게 말할 수는 없습니다.
gdb를 이요해 보세요.처음엔 어려워 보일지 몰라도 debugging
gdb를 이요해 보세요.
처음엔 어려워 보일지 몰라도 debugging에는 왓따입니다.
정말 이런 기능도 있나 싶을 기능들이 있어서 좋죠...
그냥... 단편적인 변수 출력하는 기능뿐만 아니라 좀 더 깊이 한 번 보시길...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
printf문요,,,,저는 매크로로 만들어서 이상한 부분에 삽입시켜
printf문요,,,,
저는 매크로로 만들어서 이상한 부분에 삽입시켜 봅니다.
순간을 지배하는 사람이 인생을 지배한다.
gdb로 백트레이스 =333-g옵션주고 core던져주면 세그폴트난
gdb로 백트레이스 =333
-g옵션주고 core던져주면 세그폴트난 지점이 나오기도 하죠 ;D
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
[code:1]$ cc buggy.c -lefence$ gdb a.o
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
일단 디버거로 세그폴트난 지점을 잡고 그 이후엔 과연 그 지점 근처에서
일단 디버거로 세그폴트난 지점을 잡고 그 이후엔 과연 그 지점 근처에서 뭐가 잘못되었나 곰곰히 생각해보기
=> 제가 쓰는 방법인데 이것보다 더 좋은 방법 없나요?
It's better to burn out than to fade away. -- Kurt Cobain.
제가해본 가장 절대적인 디버깅...소스지우기..언제던가..
제가해본 가장 절대적인 디버깅...
소스지우기..
언제던가.. 한번은 main() 과 return 문빼고 다지운적도 있다는..
----------------------------------------------------------------------------
printf 와 gdb를 병행하십시오.극소수로 메모리 오버플루로우
printf 와 gdb를 병행하십시오.
극소수로 메모리 오버플루로우가 발생하면 스택이 깨질 수 있습니다.
그러면 bt로 볼수 없죠... 처음엔 당연히 bt로 확인하시는게 낳으실 거고
스택 깨지면 답 없습니다. printf로 무식하게 찍으십시오.
^____^; 방가여
mpatrol 나 valgrind와 같은 메모리 디버거를 사용하면어느
mpatrol 나 valgrind와 같은 메모리 디버거를 사용하면
어느 지점에서 오버플로우나 잘못된 주소의 참조가 일어 나는지 찾는데 도움을 얻을 수 있습니다.
===============
Vas Rel Por
가능하면 메모리 디버거를 사용하시는 것이 좋습니다. printf와 gdb
가능하면 메모리 디버거를 사용하시는 것이 좋습니다. printf와 gdb 만으로 찾아다니면 "발생한 현상"이 아닌 숨어있는 -- 당장 현재 환경에서는 잘 작동하지만 모듈을 추가하거나 다른 시스템에서 컴파일했을 때 문제가 생겨도 이상할 것이 없는 잘못들을 찾아내기가 어렵습니다. 웬만큼 메모리와 버퍼 크기를 다루는 데에 이골이 난 경우라 아니라면 문제가 되는 코드를 보면서도 깨닫지 못하는 경우가 대부분입니다.
반면 메모리 디버거를 사용하면 일부러 printf를 사용해서 탐색범위를 줄여나가는 귀찮을 일을 할 필요가 없이 잘못된 위치를 바로 찾아주기 때문에 + 잠재적으로 문제의 가능성이 있는 위치를 근본적으로 찾아주기 때문에 좋습니다.
아무리 전문가이고 경험이 많아도 포인터와 스트링 함수를 많이 사용해 작성한 코드에서 문제가 없다고 자신있게 말할 수는 없습니다.
댓글 달기