GDB调试多线程

来源:互联网 发布:我的世界手机版龙珠js 编辑:程序博客网 时间:2024/06/11 05:34

对于多进程多线程的程序,基本步骤为gdb打开要调试的程序,进入要调试的进程,进入要调试的线程,开始调试。下面给出一个调试的例子(部分gdb输出已改动或删除):

1. 查看要调试进程的id

[work@Zhongshan-RTB2 rtb]$ ps axu | grep process-name
work     23884  6.1  0.0 1645696 27152 ?       Ssl  Aug08 248:03 ./process-name
work     23887  6.0  0.0 1645680 27128 ?       Ssl  Aug08 246:48 ./process-name
work     23889  6.1  0.0 1645676 29132 ?       Ssl  Aug08 247:20 ./process-name
work     23894  6.0  0.0 1645672 25076 ?       Ssl  Aug08 246:13 ./process-name

2. gdb + 可执行文件 进入gdb视图

[work@Zhongshan-RTB2 rtb]$ gdb process-name
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-50.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/work/rtb/rtb...done.
(gdb) 

3. attach + 要调试的进程id

(gdb) attach 23887(部分输出已删除)
Attaching to program: /home/work/rtb/rtb, process 23887
Reading symbols from /usr/lib64/libcrypto.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libcrypto.so.6
Reading symbols from /usr/lib64/libini_config.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libini_config.so.2
Reading symbols from /lib64/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
[New Thread 0x7fbd93fff700 (LWP 24012)]
[New Thread 0x7fbda0dfa700 (LWP 24011)]
[New Thread 0x7fbda17fb700 (LWP 24010)]
[New Thread 0x7fbda21fc700 (LWP 24009)]
[New Thread 0x7fbda2bfd700 (LWP 24008)]
Loaded symbols for /lib64/libpthread.so.0
Reading symbols from /lib64/libm.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib64/libm.so.6
Loaded symbols for /usr/lib64/libref_array.so.1
Reading symbols from /lib64/libnss_files.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libnss_files.so.2
0x0000003d5ec0804d in pthread_join () from /lib64/libpthread.so.0
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.47.el6.x86_64 libcollection-0.6.0-9.el6.x86_64 libini_config-0.6.1-9.el6.x86_64 libpath_utils-0.2.1-9.el6.x86_64 libref_array-0.1.1-9.el6.x86_64 openssl098e-0.9.8e-17.el6.centos.x86_64 zlib-1.2.3-27.el6.x86_64
(gdb) 

4. 查看线程信息

(gdb) 
(gdb) info threads
  23 Thread 0x7fbdc6541700 (LWP 23890)  0x0000003d5e8dc053 in poll () from /lib64/libc.so.6
  22 Thread 0x7fbdc5b40700 (LWP 23891)  0x0000003d5ec0b3dc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  21 Thread 0x7fbdc513f700 (LWP 23914)  0x0000003d5e8aab9d in nanosleep () from /lib64/libc.so.6
  20 Thread 0x7fbdbffff700 (LWP 23915)  0x0000003d5e8dc053 in poll () from /lib64/libc.so.6
  19 Thread 0x7fbdbf5fe700 (LWP 23916)  0x0000003d5ec0b3dc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  18 Thread 0x7fbdbebfd700 (LWP 23936)  0x0000003d5e8aab9d in nanosleep () from /lib64/libc.so.6
  17 Thread 0x7fbdbe1fc700 (LWP 23997)  0x0000003d5ec0dff4 in __lll_lock_wait () from /lib64/libpthread.so.0
  16 Thread 0x7fbdbd7fb700 (LWP 23998)  0x0000003d5ec0dff4 in __lll_lock_wait () from /lib64/libpthread.so.0
  3 Thread 0x7fbda0dfa700 (LWP 24011)  0x0000003d5ec0dff4 in __lll_lock_wait () from /lib64/libpthread.so.0
  2 Thread 0x7fbd93fff700 (LWP 24012)  0x0000003d5ec0dff4 in __lll_lock_wait () from /lib64/libpthread.so.0
* 1 Thread 0x7fbdc6751700 (LWP 23887)  0x0000003d5ec0804d in pthread_join () from /lib64/libpthread.so.0
(gdb)

5. thread + thread_number

(gdb) thread 16
[Switching to thread 16 (Thread 0x7fbdbd7fb700 (LWP 23998))]#0  0x0000003d5ec0dff4 in __lll_lock_wait () from /lib64/libpthread.so.0

6. 调试线程
(gdb) bt
#0  0x0000003d5ec0dff4 in __lll_lock_wait () from /lib64/libpthread.so.0
#1  0x0000003d5ec09328 in _L_lock_854 () from /lib64/libpthread.so.0
#2  0x0000003d5ec091f7 in pthread_mutex_lock () from /lib64/libpthread.so.0
#3  0x000000000044f01a in fcgi_main(void*) () at src/main.cpp:138
#4  0x0000003d5ec077f1 in start_thread () from /lib64/libpthread.so.0
#5  0x0000003d5e8e570d in clone () from /lib64/libc.so.6
(gdb)

1 0
原创粉丝点击