gdb调试实例

本文介绍如何使用GDB工具调试Nginx进程。包括查看进程信息、读取符号表、设置断点等操作,并展示了如何跟踪Nginx主进程和工作进程的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gdb保留历史: 
show history 
set history expansion 
set history save 
sethistory size 256 
保存在 ~/.gdb_history 

干掉的进程会重建 
__epoll_wait_nocancel () 
怎么建立的?不要忽略!! 

ctrl+f 
(gdb) 

Linux代码  收藏代码
  1. [root@red54apple gdbtest]# gdb  
  2. GNU gdb Fedora (6.8-37.el5)  
  3. Copyright (C) 2008 Free Software Foundation, Inc.  
  4. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>  
  5. This is free software: you are free to change and redistribute it.  
  6. There is NO WARRANTY, to the extent permitted by law.  Type "show copying"  
  7. and "show warranty" for details.  
  8. This GDB was configured as "x86_64-redhat-linux-gnu".  
  9. (gdb) attach 4992  
  10. Attaching to process 4992  
  11. Reading symbols from /opt/backup/mynginx/workdir/nginx-1.0.5/objs/nginx...done.  
  12. Reading symbols from /lib64/libpthread.so.0...done.  
  13. [Thread debugging using libthread_db enabled]  
  14. [New Thread 0x2b8b4d052520 (LWP 4992)]  
  15. Loaded symbols for /lib64/libpthread.so.0  
  16. Reading symbols from /lib64/libcrypt.so.1...done.  
  17. Loaded symbols for /lib64/libcrypt.so.1  
  18. Reading symbols from /lib64/libm.so.6...done.  
  19. Loaded symbols for /lib64/libm.so.6  
  20. Reading symbols from /lib64/libcrypto.so.6...done.  
  21. Loaded symbols for /lib64/libcrypto.so.6  
  22. Reading symbols from /usr/lib64/libz.so.1...done.  
  23. Loaded symbols for /usr/lib64/libz.so.1  
  24. Reading symbols from /lib64/libc.so.6...done.  
  25. Loaded symbols for /lib64/libc.so.6  
  26. Reading symbols from /lib64/ld-linux-x86-64.so.2...done.  
  27. Loaded symbols for /lib64/ld-linux-x86-64.so.2  
  28. Reading symbols from /lib64/libdl.so.2...done.  
  29. Loaded symbols for /lib64/libdl.so.2  
  30. Reading symbols from /lib64/libnss_files.so.2...done.  
  31. Loaded symbols for /lib64/libnss_files.so.2  
  32. 0x0000003b6e23079a in sigsuspend () from /lib64/libc.so.6  
  33. (gdb) info proc   
  34. process 4992  
  35. cmdline = 'nginx: master process /usr/local/nginx/objs/nginx'  
  36. cwd = '/root/gdbtest'  
  37. exe = '/opt/backup/mynginx/workdir/nginx-1.0.5/objs/nginx'  
  38. (gdb) q  
  39. The program is running.  Quit anyway (and detach it)? (y or n) y  
  40. Detaching from program: /opt/backup/mynginx/workdir/nginx-1.0.5/objs/nginx, process 4992  
  41. [root@red54apple gdbtest]# pidof /usr/local/nginx/objs/nginx  
  42. 5000 4999 4998 4997 4996 4995 4994 4993 4992  
  43. [root@red54apple gdbtest]#   
  44. [root@red54apple gdbtest]#   
  45. [root@red54apple gdbtest]# gdb   
  46. GNU gdb Fedora (6.8-37.el5)  
  47. Copyright (C) 2008 Free Software Foundation, Inc.  
  48. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>  
  49. This is free software: you are free to change and redistribute it.  
  50. There is NO WARRANTY, to the extent permitted by law.  Type "show copying"  
  51. and "show warranty" for details.  
  52. This GDB was configured as "x86_64-redhat-linux-gnu".  
  53. (gdb) attach 4999  
  54. Attaching to process 4999  
  55. Reading symbols from /opt/backup/mynginx/workdir/nginx-1.0.5/objs/nginx...done.  
  56. Reading symbols from /lib64/libpthread.so.0...done.  
  57. [Thread debugging using libthread_db enabled]  
  58. [New Thread 0x2b8b4d052520 (LWP 4999)]  
  59. Loaded symbols for /lib64/libpthread.so.0  
  60. Reading symbols from /lib64/libcrypt.so.1...done.  
  61. Loaded symbols for /lib64/libcrypt.so.1  
  62. Reading symbols from /lib64/libm.so.6...done.  
  63. Loaded symbols for /lib64/libm.so.6  
  64. Reading symbols from /lib64/libcrypto.so.6...done.  
  65. Loaded symbols for /lib64/libcrypto.so.6  
  66. Reading symbols from /usr/lib64/libz.so.1...done.  
  67. Loaded symbols for /usr/lib64/libz.so.1  
  68. Reading symbols from /lib64/libc.so.6...done.  
  69. Loaded symbols for /lib64/libc.so.6  
  70. Reading symbols from /lib64/ld-linux-x86-64.so.2...done.  
  71. Loaded symbols for /lib64/ld-linux-x86-64.so.2  
  72. Reading symbols from /lib64/libdl.so.2...done.  
  73. Loaded symbols for /lib64/libdl.so.2  
  74. Reading symbols from /lib64/libnss_files.so.2...done.  
  75. Loaded symbols for /lib64/libnss_files.so.2  
  76. 0x0000003b6e2d3fd3 in __epoll_wait_nocancel () from /lib64/libc.so.6  
  77. (gdb) info proc   
  78. process 4999  
  79. cmdline = 'nginx: worker process'  
  80. cwd = '/root/gdbtest'  
  81. exe = '/opt/backup/mynginx/workdir/nginx-1.0.5/objs/nginx'  
  82. (gdb) info args   
  83. No symbol table info available.  
  84. (gdb) b proc  
  85. Function "proc" not defined.  
  86. Make breakpoint pending on future shared library load? (y or [n]) n  
  87. (gdb) x proc  
  88. No symbol "proc" in current context.  
  89. (gdb) info *proc  
  90. Undefined info command: "*proc".  Try "help info".  
  91. (gdb) info program   
  92.     Using the running image of attached Thread 0x2b8b4d052520 (LWP 4999).  
  93. Program stopped at 0x6e2d3fd3.  
  94. (gdb) x 0x2b8b4d052520  
  95. 0x2b8b4d0525200x4d052520  
  96. (gdb) x/c 0x2b8b4d052520  
  97. 0x2b8b4d05252032 ' '  
  98. (gdb) x/i 0x2b8b4d052520  
  99. 0x2b8b4d052520: and    %ah,0x2b8b4d05(%rip)        # 0x2b8b7890722b  
  100. (gdb) p port.6281   
  101. No symbol "port" in current context.  
  102. (gdb) shell ps -ef|grep nginx  
  103. root      4992     1  0 Sep22 ?        00:00:00 nginx: master process /usr/local/nginx/objs/nginx  
  104. nobody    4993  4992  0 Sep22 ?        00:00:00 nginx: worker process        
  105. nobody    4994  4992  0 Sep22 ?        00:00:00 nginx: worker process        
  106. nobody    4995  4992  0 Sep22 ?        00:00:00 nginx: worker process        
  107. nobody    4996  4992  0 Sep22 ?        00:00:00 nginx: worker process        
  108. nobody    4997  4992  0 Sep22 ?        00:00:00 nginx: worker process        
  109. nobody    4998  4992  0 Sep22 ?        00:00:00 nginx: worker process        
  110. nobody    4999  4992  0 Sep22 ?        00:00:00 nginx: worker process        
  111. nobody    5000  4992  0 Sep22 ?        00:00:00 nginx: worker process        
  112. root      5121  5082  0 00:15 pts/1    00:00:00 bash -c ps -ef|grep nginx  
  113. root      5123  5121  0 00:15 pts/1    00:00:00 grep nginx  
  114. (gdb) attach 4992  
  115. A program is being debugged already.  Kill it? (y or n) y  
  116. Attaching to program: /opt/backup/mynginx/workdir/nginx-1.0.5/objs/nginx, process 4992  
  117. [Thread debugging using libthread_db enabled]  
  118. [New Thread 0x2b8b4d052520 (LWP 4992)]  
  119. Loaded symbols for /lib64/libpthread.so.0  
  120. Loaded symbols for /lib64/libcrypt.so.1  
  121. Loaded symbols for /lib64/libm.so.6  
  122. Loaded symbols for /lib64/libcrypto.so.6  
  123. Loaded symbols for /usr/lib64/libz.so.1  
  124. Loaded symbols for /lib64/libc.so.6  
  125. Loaded symbols for /lib64/ld-linux-x86-64.so.2  
  126. Loaded symbols for /lib64/libdl.so.2  
  127. Loaded symbols for /lib64/libnss_files.so.2  
  128. ngx_vslprintf (buf=0x6d881c "",   
  129.     last=0xffffffffffffffff <Address 0xffffffffffffffff out of bounds>, fmt=0x4ae2fb "%4d/%02d/%02d %02d:%02d:%02d", args=0x7fff1a77bb30)  
  130.     at src/core/ngx_string.c:157  
  131. 157     while (*fmt && buf < last) {  
  132. (gdb) shell ps -ef|grep nginx  


Linux代码  收藏代码
  1. [root@red54apple ~]# gdb  
  2. GNU gdb Fedora (6.8-37.el5)  
  3. Copyright (C) 2008 Free Software Foundation, Inc.  
  4. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>  
  5. This is free software: you are free to change and redistribute it.  
  6. There is NO WARRANTY, to the extent permitted by law.  Type "show copying"  
  7. and "show warranty" for details.  
  8. This GDB was configured as "x86_64-redhat-linux-gnu".  
  9. (gdb) shell pidof /usr/local/nginx/objs/nginx  
  10. 5283 5279 5222 5000 4996 4995 4994 4993 4992  
  11. (gdb) x/i $pc  
  12. No registers.  
  13. (gdb) show reg  
  14. Undefined show command: "reg".  Try "help show".  
  15. (gdb) attach 5283  
  16. Attaching to process 5283  
  17. Reading symbols from /opt/backup/mynginx/workdir/nginx-1.0.5/objs/nginx...done.  
  18. Reading symbols from /lib64/libpthread.so.0...done.  
  19. [Thread debugging using libthread_db enabled]  
  20. [New Thread 0x2b8b4d052520 (LWP 5283)]  
  21. Loaded symbols for /lib64/libpthread.so.0  
  22. Reading symbols from /lib64/libcrypt.so.1...done.  
  23. Loaded symbols for /lib64/libcrypt.so.1  
  24. Reading symbols from /lib64/libm.so.6...done.  
  25. Loaded symbols for /lib64/libm.so.6  
  26. Reading symbols from /lib64/libcrypto.so.6...done.  
  27. Loaded symbols for /lib64/libcrypto.so.6  
  28. Reading symbols from /usr/lib64/libz.so.1...done.  
  29. Loaded symbols for /usr/lib64/libz.so.1  
  30. Reading symbols from /lib64/libc.so.6...done.  
  31. Loaded symbols for /lib64/libc.so.6  
  32. Reading symbols from /lib64/ld-linux-x86-64.so.2...done.  
  33. Loaded symbols for /lib64/ld-linux-x86-64.so.2  
  34. Reading symbols from /lib64/libdl.so.2...done.  
  35. Loaded symbols for /lib64/libdl.so.2  
  36. Reading symbols from /lib64/libnss_files.so.2...done.  
  37. Loaded symbols for /lib64/libnss_files.so.2  
  38. 0x0000003b6e2d3fd3 in __epoll_wait_nocancel () from /lib64/libc.so.6  
  39. (gdb) show reg  
  40. Undefined show command: "reg".  Try "help show".  
  41. (gdb) info reg  
  42. rax            0xfffffffffffffffc   -4  
  43. rbx            0x3b6e01bbc0 255248677824  
  44. rcx            0xffffffffffffffff   -1  
  45. rdx            0x200    512  
  46. rsi            0x13cf1370   332338032  
  47. rdi            0x16 22  
  48. rbp            0x7fff1a77bfb0   0x7fff1a77bfb0  
  49. rsp            0x7fff1a77bf28   0x7fff1a77bf28  
  50. r8             0x17566ce    24471246  
  51. r9             0x4e7b688a   1316710538  
  52. r10            0x5  5  
  53. r11            0x246    582  
  54. r12            0x0  0  
  55. r13            0x7fff1a77c550   140733637444944  
  56. r14            0x0  0  
  57. r15            0x0  0  
  58. rip            0x3b6e2d3fd3 0x3b6e2d3fd3 <__epoll_wait_nocancel+10>  
  59. eflags         0x246    [ PF ZF IF ]  
  60. cs             0x33 51  
  61. ss             0x2b 43  
  62. ds             0x0  0  
  63. es             0x0  0  
  64. fs             0x0  0  
  65. gs             0x0  0  
  66. fctrl          0x37f    895  
  67. fstat          0x0  0  
  68. ftag           0xffff   65535  
  69. fiseg          0x0  0  
  70. fioff          0x0  0  
  71. foseg          0x0  0  
  72. fooff          0x0  0  
  73. fop            0x0  0  
  74. mxcsr          0x1f80   [ IM DM ZM OM UM PM ]  
  75. (gdb) x/i $pc  
  76. 0x3b6e2d3fd3 <__epoll_wait_nocancel+10>:  cmp    $0xfffffffffffff001,%rax  
  77. (gdb)  
  78. (gdb) x/10i $pc  
  79. 0x3b6e2d3fd3 <__epoll_wait_nocancel+10>:  cmp    $0xfffffffffffff001,%rax  
  80. 0x3b6e2d3fd9 <__epoll_wait_nocancel+16>:  jae    0x3b6e2d4038 <epoll_wait+120>  
  81. 0x3b6e2d3fdb <__epoll_wait_nocancel+18>:  retq     
  82. 0x3b6e2d3fdc <epoll_wait+28>: sub    $0x28,%rsp  
  83. 0x3b6e2d3fe0 <epoll_wait+32>: mov    %rdi,0x8(%rsp)  
  84. 0x3b6e2d3fe5 <epoll_wait+37>: mov    %rsi,0x10(%rsp)  
  85. 0x3b6e2d3fea <epoll_wait+42>: mov    %rdx,0x18(%rsp)  
  86. 0x3b6e2d3fef <epoll_wait+47>: mov    %rcx,0x20(%rsp)  
  87. 0x3b6e2d3ff4 <epoll_wait+52>: callq  0x3b6e2dfa80 <__libc_enable_asynccancel>  
  88. 0x3b6e2d3ff9 <epoll_wait+57>: mov    0x8(%rsp),%rdi  
  89. (gdb)   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值