| 000 | 01483camcc2200445 c 4500 | |
| 001 | 000045633502 | |
| 005 | 20140210200530 | |
| 007 | ta | |
| 008 | 101109s2010 ulka 001c kor | |
| 020 | ▼a 9788994405018 ▼g 13560 | |
| 035 | ▼a (KERIS)BIB000012193864 | |
| 040 | ▼a 245011 ▼c 245011 ▼d 245011 ▼d 222001 ▼d 244002 ▼d 211009 | |
| 041 | 1 | ▼a kor ▼h jpn |
| 082 | 0 4 | ▼a 005.14 ▼2 23 |
| 085 | ▼a 005.14 ▼2 DDCK | |
| 090 | ▼a 005.14 ▼b 2010z3 | |
| 245 | 0 0 | ▼a Debug hacks : ▼b 디버그를 극대화하는 테크닉 & 툴 / ▼d 요시오카 히로타카 [외]; ▼e 진명조 역 |
| 246 | 1 9 | ▼a Debug hacks : ▼b デバッグを極めるテクニック&ッ-ル |
| 246 | 3 | ▼a Debug hacks : ▼b debaggu o kiwameru tekunikku & tsuru |
| 260 | ▼a 서울 : ▼b 와우북스, ▼c 2010 | |
| 300 | ▼a xx, 474 p. : ▼b 삽화 ; ▼c 24 cm | |
| 500 | ▼a 저자: 야마토 카즈히로(大和一洋), 오오이와 나오히로(大岩尙宏), 아베 토요(安部東洋), 요시다 스케(吉田俊輔) | |
| 500 | ▼a 색인과 부록수록 | |
| 700 | 1 | ▼a 吉岡弘隆, ▼e 저 |
| 700 | 1 | ▼a 大和一洋, ▼e 저 |
| 700 | 1 | ▼a 大岩尙宏, ▼e 저 |
| 700 | 1 | ▼a 安部東洋, ▼e 저 |
| 700 | 1 | ▼a 吉田俊輔, ▼e 저 |
| 700 | 1 | ▼a 진명조, ▼e 역 |
| 900 | 1 0 | ▼a Yoshioka, Hirotaka, ▼e 저 |
| 900 | 1 0 | ▼a Yamato, Kazuhiro, ▼e 저 |
| 900 | 1 0 | ▼a Oiwa, Naohiro, ▼e 저 |
| 900 | 1 0 | ▼a Yoshida, Shunsuke, ▼e 저 |
| 900 | 1 0 | ▼a Abe, Toyo, ▼e 저 |
| 900 | 1 0 | ▼a 요시오카 히로타카, ▼e 저 |
| 900 | 1 0 | ▼a 야마토 카즈히로, ▼e 저 |
| 900 | 1 0 | ▼a 오오이와 나오히로, ▼e 저 |
| 900 | 1 0 | ▼a 아베 토요, ▼e 저 |
| 900 | 1 0 | ▼a 요시다 스케, ▼e 저 |
소장정보
| No. | 소장처 | 청구기호 | 등록번호 | 도서상태 | 반납예정일 | 예약 | 서비스 |
|---|---|---|---|---|---|---|---|
| No. 1 | 소장처 과학도서관/Sci-Info(1층서고)/ | 청구기호 005.14 2010z3 | 등록번호 121228252 (8회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
| No. 2 | 소장처 세종학술정보원/과학기술실(5층)/ | 청구기호 005.14 2010z3 | 등록번호 151296520 (2회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
| No. | 소장처 | 청구기호 | 등록번호 | 도서상태 | 반납예정일 | 예약 | 서비스 |
|---|---|---|---|---|---|---|---|
| No. 1 | 소장처 과학도서관/Sci-Info(1층서고)/ | 청구기호 005.14 2010z3 | 등록번호 121228252 (8회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
| No. | 소장처 | 청구기호 | 등록번호 | 도서상태 | 반납예정일 | 예약 | 서비스 |
|---|---|---|---|---|---|---|---|
| No. 1 | 소장처 세종학술정보원/과학기술실(5층)/ | 청구기호 005.14 2010z3 | 등록번호 151296520 (2회 대출) | 도서상태 대출가능 | 반납예정일 | 예약 | 서비스 |
컨텐츠정보
책소개
프로그래머가 프로그래밍을 할 때 피해갈 수 없는 디버그라는 프로세스에 관해서 기록한 책으로, 역전(歷戰)의 프로그래머가 경험에서 얻은 버그 찾는 법, 고치는 법이 가득 수록되어 있다. 특히 보통은 눈에 잘 띄지 않는 리눅스 자체의 버그에 관한 Hack은 귀중한 정보가 되리라 생각한다. 몇몇 Hack은 많은 프로그래머가 일상적으로 사용하지는 않는 것일지도 모르지만 오히려 그 발상은 더욱 참고가 될 것이다. 특히나 gdb나 valgrind, oprofile과 같은 편리한 툴에 관해서 확실히 설명하고 있다.
대상 독자는, 스스로 프로그래밍 설계, 구현, 테스트, 디버그 등을 수행하는 초급부터 중급 프로그래머다. 자신의 프로그래밍 스킬을 더 키우고자 하는 사람을 대상으로 쓰여 졌으며 C/C++ 프로그래머뿐만 아니라 Perl/PHP/Python/Ruby 등 스크립트 언어로 프로그램을 작성하고 있는 사람들에게도 이 책에 기술된 방법들 중 상당부분은, 언어나 도구 모두 다르더라도 사고방식은 참고가 될 것이다. 또한 Windows나 Mac 등 다른 플랫폼에서 프로그래밍을 하고 있는 사람들에게도 마찬가지로 그 사고방식은 참고가 되리라 생각한다.
미라클 리눅스 주식회사의 정예 엔지니어들이 장기간의 리눅스 커널 개발 경험에서 쌓은 디버그 테크닉을 설명한다. 워밍업, 준비, 필요한 지식, 버그의 원인을 재빨리 파악해서 수정하기 위해 편리한 테크닉과 툴, 고도의 디버그 기법까지 아낌없이 공개한다. 다양한 사례를 기반으로 한 실제적이고 실용적인 기술이 가득하다. 효율이 좋고 퀄리티가 높은 개발을 위해서 필수적인 책이다.
[1장. 워밍업(warmingup)]에서는 디버그란 어떠한 프로세스인지 개념적으로 설명한다. 또한 이 책『Debug Hacks』의 전체적인 모습을 기술하고 있다. xi
[2장. 디버그 전에 알아야 할 것]에서는 디버그의 기본으로서 디버거(GDB) 사용법, Intel 아키텍처 기본, 스택 기초지식, 함수호출 시 인수 전달법, 어셈블리어 공부방법 등을 설명한다.
[3장. 커널 디버그 준비]에서는 리눅스 커널의 기본적인 디버그 방법을 기술하고 있다. Oops 메시지 보는 법, 시리얼콘솔 사용법, 네트워크를 경유한 커널 메시지 얻기, SysRq키, 각종 덤프 얻는 방법, crash 명령 사용법, IPMI 및 NMI watchdog으로 크래시 덤프 얻는 법, 커널 특유의 어셈블리어 등 커널 디버그의 기본에 대해 기술하고 있다.
[4장. 실전 애플리케이션 디버그]에서는 유저 애플리케이션의 실전적 디버그 방법에 대해 기술하고 있다. 스택 오버플로우에 의한 segmentation fault(SIGSEGV), 백트레이스의 비정상 출력, 배열 비정상 접근에 의한 스택 파괴, 감시점을 활용한 메모리 비정상 접근 검출, malloc()/free()에서의 장애, 애플리케이션의 스톨상태 등 다양한 사례에 따른 디버그 방법을 기술하고 있다.
[5장. 실전 커널 디버그]에서는 커널 장애에 대한 디버그 방법을 기술하고 있다. 커널 패닉(NULL포인터 참조, 리스트 파괴, 경쟁조건), 커널 스톨상태(무한루프, 스핀락, 세마포어, 실시간 프로세스), 동작이 느려지고 CPU 부하가 높아지는 문제에 관한 디버그 방법을 기술하고 있다.
[6장. 고수준 디버그 테크닉]에서는 디버그하는 데 필요한 다양한 툴 소개와 세세한 노하우 등 광범위한 내용을 모았다. 여기서 소개하고 있는 툴과 테크닉도 strace, objdump, Valgrind, kprobes, jprobes, KAHO, systemtap, proc 파일시스템, oprofile, VMware vprobe, fault injection, Xen 등 여러 가지로 나뉜다. 그 밖에 OOM Killer의 동작과 구조, GOT/PLT를 경유한 함수호출을 검출하는 방법, 주위의 x86머신이 64비트를 지원하는지 여부를 조사하는 방법까지 기술하고 있다.
[부록. Debug Hacks 용어 정리]에서는 이 책에 등장하는 용어를 설명한다. 각 Hack을 읽어가면서 모르는 용어가 나왔을 때 이 부록을 참조하기 바란다.
정보제공 :
저자소개
요시오카 히로타카(지은이)
미라클 리눅스 소속 프로그래머. 커널 독서회라는 리눅스(Linux) 기술 연구회를 1999년부터 주재하고 있다. 게이오 의숙대학(慶?義塾大學) 대학원 수료. 일본 DEC 연구개발센터, 일본 오라클을 거쳐 미라클 리눅스 창업. 대학 졸업 후 수많은 소프트웨어 제품(일본어 COBOL, DEC Rdb, Oracle 8, MIRACLE LINUX, Asianux 등)을 개발해왔다. JIS X0208:1990/X0212:1990 표준화, U-20 프로그래밍 콘테스트 심사위원, 시큐리티 & 프로그래밍 캠프, 프로그래밍 부문 주 심사위원. 2008년 경제산업성 상무정보정책국장 감사장, 라쿠텐(?天) 테크놀로지 어워드 2008 금상 수상. 블로그 ?꿈의 힘(コメのケカラ)? : http://blog.miraclelinux.com/yume/ ?미래의 언젠가(未來のいつか)/hyoshiok의 일기? : http://d.hatena.ne.jp/hyoshiok/
야마토 카즈히로(지은이)
미라클 리눅스에서 일하는 소프트웨어 엔지니어. 지금까지는 리눅스 커널이 나 GLIBC 관련 업무가 중심이었으나, 최근에는 gstreamer 등의 미디어 관 련 Hack에도 열심이다. GUI 툴에는 서툴러서 개발환경은 오로지 vim+gcc+gdb.
오오이와 나오히로(지은이)
미라클 리눅스 주식회사 소속의 소프트웨어 엔지니어. 대학에서는 휴대전화 등 안테나로 수신하는 무선 고주파수를 다루는 아날로그 회로를 연구했으며 소프트웨어를 전혀 모른 채 리눅스 업무에 종사함. 사회인이 되기까지 거의 책을 읽은 적이 없지만, 최근에는 잡지도 집필하고 있다.『Debug Hacks』저자로, 오라일리 재팬에서 Hacks 시리즈 두 권째 집필.
아베 토요(지은이)
미라클 리눅스 소속 소프트웨어 엔지니어. Hello World 프로그램도 제대로 작성하지 못하던 상태에서 리눅스 커널 세계에 입문해서 힘든 경험들을 했다. 이제까지 x86 아키텍처만 다루어 왔으며 집필이 일단락되면 ARM에 도전하려고 생각 중이다.
요시다 슌스케(지은이)
미라클 리눅스 소속 시스템 엔지니어. 어디에나 존재하는 자칭, 일반인. 지방 소프트웨어 기업부터 제조업 SI기업을 거쳐 미라클 리눅스에 입사. OS/DataBase/Network/가상화 등의 인프라 계열 SE. 코에도(小江?) LUG,역주1)/YLUG(요코하마 LinuxUsersGroup),/USAGI 보완계획 등 관동 근교의 OSS 커뮤니티에 참가. 이벤트 참가/출전 및 원고집필 등을 하고 있다.g블로그「제3의 펭귄(第三のべンギン)」: http://blog.miraclelinux.com/thethird/
진명조(옮긴이)
NHN Cloud 시스템 엔지니어. 번역한 책으로는 『대규모 서비스를 지탱하는 기술』, 『서버/인프라를 지탱하는 기술』, 『클라우드의 충격』, 『서버/인프라 엔지니어를 위한 DevOps』, 『프로세서를 지탱하는 기술』, 『파이썬 쉽게, 더 쉽게』(이상 제이펍), 『인프라 엔지니어의 교과서: 시스템 구축과 관리편』, 『텐서플로로 시작하는 딥러닝』, 『와이어샤크를 이용한 패킷 캡처 철저 입문』(이상 길벗), 『DEBUG HACKS』, 『리눅스 커널 HACKS』(이상 와우북스), 『Binary Hacks: 해커가 전수하는 테크닉 100선』, 『입문자를 위한 루비』(이상 ITC), 『데이터가 보인다』(비제이퍼블릭), 『C언어로 배우는 알고리즘 입문』(한빛미디어) 등이 있습니다.
목차
목차 추천의 글 = ⅲ 역자의 글 = ⅴ Credit = ⅶ 시작하며 = ⅸ 1장 워밍업(warmingup) 01. 디버그란? = 1 02. Debug Hacks 맵 = 6 03. 디버그의 이해 = 8 2장 디버그 전에 알아두어야 할 것 04. 프로세스의 코어덤프 얻기 = 17 05. 디버거(GDB)의 기본적인 사용법 1 = 24 06. 디버거(GDB)의 기본적인 사용법 2 = 40 07. 디버거(GDB)의 기본적인 사용법 3 = 49 08. 인텔 아키텍처의 기본 = 56 09. 디버그에 필요한 스택 기초지식 = 64 10. 함수호출 시 매개변수 전달방법(x86_64) = 76 11. 함수호출 시 매개변수 전달방법(i386) = 83 12. 함수호출 시 매개변수 전달방법(C++) = 86 13. 어셈블리어 학습법 = 90 14. 어셈블리어로부터 소스코드 위치 찾기 = 96 3장 커널 디버그 준비 15. Oops 메시지 보는 법 = 107 16. minicom으로 시리얼 콘솔 접속하기 = 112 17. 네트워크를 경유한 커널 메시지 얻기 = 115 18. SysRq 키를 이용한 디버그 방법 = 120 19. diskdump로 커널 크래시 덤프 얻기 128 20. Kdump로 커널 크래시 덤프 얻기 = 135 21. crash 명령 사용법 = 140 22. IPMI watchdog timer로 freeze 시 크래시 덤프 얻기 = 156 23. NMI watchdog으로 freeze 시 크래시 덤프 얻기 = 162 24. 커널 특유의 어셈블리 명령 1 = 164 25. 커널 특유의 어셈블리 명령 2 = 168 4장 실전 애플리케이션 디버그 26. SIGSEGV에 의한 애플리케이션 비정상 종료 = 173 27. 백트레이스의 비정상 출력 = 182 28. 배열 비정상 접근에 의한 메모리 내용 파괴 = 187 29. 감시점을 활용한 메모리 비정상 접근 감지 = 196 30. malloc, free에 의한 장애 발생 = 200 31. 애플리케이션의 스톨상태(데드락) = 203 32. 애플리케이션의 스톨상태(무한루프) = 210 5장 실전 커널 디버그 33. 커널 패닉(NULL포인터 참조) = 219 34. 커널 패닉(리스트 파괴) = 229 35. 커널 패닉(경쟁조건) = 238 36. 커널의 스톨상태(무한루프) = 253 37. 커널의 스톨상태(스핀락 1) = 263 38. 커널의 스톨상태(스핀락 2) = 266 39. 커널의 스톨상태(세마포어) = 274 40. 실시간 프로세스의 스톨상태 = 286 41. 동작이 느려지는 문제 = 295 42. CPU 부하가 높아지는 문제 = 303 6장 고수준 디버그 테크닉 43. strace로 오류 원인에 대한 실마리 찾기 = 317 44. objdump의 편리한 옵션 = 324 45. Valgrind 사용법(기본편) = 327 46. Valgrind 사용법(실전편) = 333 47. kprobes로 커널 내부정보 얻기 = 338 48. jprobes로 커널 내부정보 얻기 = 343 49. kprobes로 커널 내부 임의의 위치의 정보 얻기 = 346 50. kprobes로 커널 내부 임의의 위치에서 변수명을 지정하는 정보 얻기 = 351 51. KAHO를 이용해 컴파일러에 의해 Optimized out된 변수값 얻기 = 356 52. systemtap으로 동작중인 커널 디버그 하기 1 = 363 53. systemtap으로 동작중인 커널 디버그 하기 2 = 371 54. /proc/meminfo로 알 수 잇는 것 = 376 55. /proc/〈PID〉/mem으로 프로세스의 메모리 내용을 빠르게 읽기 = 381 56. OOM Killer의 동작과 구조 = 385 57. fault injection = 395 58. fault injection을 이용한 리눅스 커널의 잠재적 버그 발견 = 402 59. 리눅스 커널의 init 섹션 = 408 60. 성능 문제 해결 = 413 61. VMware Vprobe를 이용해 정보 얻기 = 423 62. Xen에서 메모리 덤프 얻기 = 428 63. GOT/PLT를 경유한 함수호출 구조 이해 = 431 64. initramfs 이미지 디버그 = 438 65. RT Watchdog을 이용해 실시간 프로세스의 스톨상태 탐지 = 443 66. 주위 x86머신의 64비트 모드 지원 여부 확인 = 448 부록 Debug Hacks 용어 정리 = 451 Debug Hacks 찾아보기 = 465



