gdb 가 더 편리 하 게 디 버 깅 nginx: ngx 보기array_t,ngx_list_t 등 구조

5748 단어
nginx 를 편리 하 게 디 버 깅 하기 위해 nginx 의 일부 링크, 배열 등 데이터 구조 에 저 장 된 요소 의 값 을 보고 gdb 의 함수 매크로 를 몇 개 써 서 편리 하 게 볼 수 있 습 니 다. 사용 방법:   다음 내용 을 이름 nginx 에 저장 합 니 다.view. gdb 파일 에 파일 을 ~ /. gdb / 디 렉 터 리 에 넣 습 니 다. gdb 를 시작 할 때 다음 명령 을 실행 하면 됩 니 다: source ~ /. gdb / nginxview.gdb
define pnarr
     if $argc == 0
         help pnarr
     else
         set $size = $arg0.nelts
         set $capacity = $arg0.nalloc
         set $i = 0 
        while $i < $size 
            printf "elem[%d]: ", $i
             p *(($arg1*)($arg0.elts) + $i)
             set $i++
         end 
        printf "Priority array size = %u
", $size printf "Priority array capacity = %u
", $capacity end end document pnarr Prints ngx_array_t information:all elements, size and capacity of the arr_var Syntax: pnarr arr_var elem_type Example: pnarr cycle->pathes ngx_path_t​ end define pnlist if $argc == 0 help pnlist else set $size = $arg0.part.nelts set $capacity = $arg0.nalloc set $part = &($arg0.part) set $data = ($arg1*)($part->elts) set $i = 0 set $continue = 1 while $continue == 1 if $i >= $part->nelts if $part->next == 0 set $continue = 0 end if $continue set $part = $part->next set $data = ($arg1*)$part->elts set $i = 0 end end if $continue printf "elem[%d]: ", $i p *$data set $i++ end end printf "frist list part's size = %u
", $size printf "frist list part's capacity = %u
", $capacity end end document pnlist Prints ngx_list_t information : all elements, size and capacity of the list_var Syntax: pnlist list_var elem_type end define pnmodule if $argc == 0 help pnmodule else set $i = $arg0 echo
printf "-----------------module[%d]---------------------
", $i p ngx_modules_name[$i] echo
module's type : if ngx_modules[$i].type == 0x45524F43 echo core_module end if ngx_modules[$i].type == 0x464E4F43 echo conf_module end if ngx_modules[$i].type == 0x544E5645 echo event_module end if ngx_modules[$i].type == 0x4C49414D echo mail_module end if ngx_modules[$i].type == 0x50545448 echo http_module end echo
p *ngx_modules[$i] set $cmd = ngx_modules[$i]->commands if $cmd != 0 set $j = 0 while $cmd[$j].name.len !=0 # command's type echo
echo command's type : if $cmd[$j].type&0x01000000 echo main_conf, end if $cmd[$j].type&0x0F000000 echo any_conf, end if $cmd[$j].type&0x00000100 echo conf_block, end if $cmd[$j].type&0x00000200 echo conf_flag, end echo
# command's detail p $cmd[$j] set $j++ end end end end document pnmodule Print ngx_modules's infomation. end define pnallmodule set $i = 0 set $module = ngx_modules[$i] while $module != 0 pnmodule $i set $i++ end end

예:


(gdb) pnarr
Prints ngx_array_t information.
Syntax: pnarr arr_var elem_type: Prints all elements, size and capacity of the arr_var
Example:
pnarr arr - prints all elements, size and capacity of arr
/ / ngx 보기cycle_s. pathes 내용, pathes 는 array 이 고 원 소 는 ngxpath_t
(gdb) pnarr cycle->pathes ngx_path_t
elem[0]: $5 = {
  name = {
    len = 135379312, 
    data = 0x811c000 ")"
  }, 
  len = 135383844, 
  level = {135392488, 135400956, 0}, 
  manager = 0, 
  loader = 0, 
  data = 0x0, 
  conf_file = 0x0, 
  line = 9
}
elem[1]: $6 = {
  name = {
    len = 45, 
    data = 0x8109615 "/home/nemo/progs/nginx/sbin/../logs/error.log"
  }, 
  len = 0, 
  level = {0, 0, 10}, 
  manager = 0x2e, 
  loader = 0x811ba90, 
  data = 0x0, 
  conf_file = 0x0, 
  line = 0
}
elem[2]: $7 = {
  name = {
    len = 0, 
    data = 0x0
  }, 
  len = 0, 
  level = {0, 0, 0}, 
  manager = 0, 
  loader = 0, 
  data = 0x0, 
  conf_file = 0x0, 
  line = 0
}
elem[3]: $8 = {
  name = {
    len = 0, 
    data = 0x0
  }, 
  len = 0, 
  level = {0, 0, 0}, 
  manager = 0, 
---Type to continue, or q to quit---
  loader = 0, 
  data = 0x0, 
  conf_file = 0x0, 
  line = 0
}
elem[4]: $9 = {
  name = {
    len = 0, 
    data = 0x0
  }, 
  len = 0, 
  level = {0, 0, 0}, 
  manager = 0, 
  loader = 0, 
  data = 0x0, 
  conf_file = 0x0, 
  line = 0
}
Priority array size = 5
Priority array capacity = 10

좋은 웹페이지 즐겨찾기