diff --git a/README.md b/README.md index aed3aea3b46aafc52eddfc790b071d03e58d517e..13bd8deaa3c828dbdee5b0475bff55e2d9f982b4 100644 --- a/README.md +++ b/README.md @@ -468,3 +468,37 @@ int main() fprintf(stdout, "%f : %d %d\n, fa, (int)fa, (int)(fa*powf(2.0f,16))); } ``` + + +## lesson09 + +* c 언어에서 ^ 는 XOR을 나타낸다. + +1. $gcc -g : debug하는 명령어 (gdb -GNU Debugger 이용) +> * 디버깅 : 버그를 잡는다는 뜻 +> * 디버깅을 하고 $file a.out 을 하면 with debug_info 라는 것이 같이 출력된다. + +2. 버그 생성 후 디버깅 해보기 +> 1. fscanf 에서 정수를 입력받을 때 &number 형태로 정수의 주소를 받아야 하는데 그냥 number로 받아 버그를 생성했다. +>> * 그랬더니 실행파일 생성 과정에서 segmentation fault(core dumped) 가 발생했다. +> 2. gdb 사용법 +>> * $gdb a.out : gdb interface 안에 들어가기 +>> * (gdb) run : 실행 -> 에러가 어디서 났는지 알 수 있다. (위의 예의 경우 scanf에서 났음) +>> * (gdb) where : call stack 현재 내가 어디 있다는 것을 알려준다. +>> * (gdb) list main : main 소스코드를 보여주어 에러코드 찾아 볼 수 있음 +>> * (gdb) list : 전체코드를 부분씩 보여줌 +>> * (gdb) break 34 : 34번째 line에서 스톱 +>>>> run 하면 위의 것 작동 +>> * (gdb) next : 지금하는 소스코드의 바로 다음(한줄)실행 +>> * (gdb) step : 함수속으로 들어 가서 다음 코드를 실행 하고 싶을 때 사용 (ex)fscanf의 소스코드로 들어가서 다음 줄 +>> * (gdb) continue : 계속 다 실행 +>> * (gdb) print i : 현재 i 값 프린팅 +>> * (gdb) delete breakpoint : break point 모두 지우기 +>> * (gdb) clear 34 : 34번에 걸린 브레이크 포인트만 지우기(특정 브레이크 포인트 찝어서 지우기) +>> * (gdb) start : 처음부터 다시 시작 +>> * (gdb) bt : call stack을 보여준다. +>> * (gdb) info break : break 한것들을 볼 수 있다. +>> * (gdb) sisable br 4 : 잠깐 동안만 4번의 브레이크를 머추게 한다. +>> * (gdb) watch : 변수가 변경 될 때 프로그램을 중단하기 위해 변수에 감시점을 설정한다. 프로그램 실행 중에 변수가 어떻게 변경되는지 자동으로 인쇄할려면 디스플레이를 사용하면 된다. watch 사용시 변수의 값이 바뀔 때 마다 실행을 중지할 수 있다. + +