• 多进程多线程GDB调试 (转)


     
      多进程多线程GDB调试
     
    一、线程调试指南:
     
    1. gdb attach pid 挂载到调试进程 
    2. gdb$ set scheduler-locking on 只执行当前选定线程的开关
    3. gdb$ info threads 显示当前进程中的线程
    ==============out put example=========================
     12 Thread 0x41f16940 (LWP 6922)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      11 Thread 0x42917940 (LWP 6923)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      10 Thread 0x43318940 (LWP 6924)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      9 Thread 0x43d19940 (LWP 6925)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      8 Thread 0x4471a940 (LWP 6926)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      7 Thread 0x4511b940 (LWP 6927)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      6 Thread 0x40a03940 (LWP 6928)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
      5 Thread 0x40b04940 (LWP 6929)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
      4 Thread 0x40c05940 (LWP 6930)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
      3 Thread 0x4521c940 (LWP 6931)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
      2 Thread 0x45c1d940 (LWP 6932)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      1 Thread 0x2b277c3bba40 (LWP 6913)  0x00000036e74cced2 in select () from /lib64/libc.so.6
    ==============out put example=========================
      说明 进程中的线程安装 1,2,3 ..编号
     
    4. gdb$ thread 1  调试1线程
       gdb$ info threads
    ==============out put example=========================
     12 Thread 0x41f16940 (LWP 6922)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      11 Thread 0x42917940 (LWP 6923)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      10 Thread 0x43318940 (LWP 6924)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      9 Thread 0x43d19940 (LWP 6925)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      8 Thread 0x4471a940 (LWP 6926)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      7 Thread 0x4511b940 (LWP 6927)  0x00000036e74cced2 in select () from /lib64/libc.so.6
      6 Thread 0x40a03940 (LWP 6928)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
      5 Thread 0x40b04940 (LWP 6929)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
      4 Thread 0x40c05940 (LWP 6930)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
      3 Thread 0x4521c940 (LWP 6931)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
      2 Thread 0x45c1d940 (LWP 6932)  0x00000036e74cced2 in select () from /lib64/libc.so.6
     *1 Thread 0x2b277c3bba40 (LWP 6913)  0x00000036e74cced2 in select () from /lib64/libc.so.6
    ==============out put example=========================   
      *代表选定线程
      
    5. gdb$ b function_name 设置断点端到的函数
    6. 通过执行
       gdb$ thread id  调试id线程
       执行
       gdb$ continue
       如果能够到达断点说明,函数在该函数中执行,运气很好,直接开始调试
       
       否则,CTRL+C 跳出该线程
       
       调试下一个线程,直到找到调试线程,开始调试。
       
    二、进程调试指南:
     
    程序又多个进程组成,在一个父进程中创建子进程,调试方法如下:
    gdb$ set follow-fork-mode [child|parent] 设置fork后,跟踪进程
     
    后续可以再进行多线程调试。
      
    以上功能是在gdb6.4的功能
     
    gdb6.6中增加了
    gdb$ set detach-on-fork [on|off]
       on: 断开 follow-fork-mode 指定进程
       off:gdb控制调试父子进程,follow-fork-mode指定进程被调试,另外一个被挂起。
  • 相关阅读:
    剑指Offer(Java版)第五十题:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志, 写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看, 但却读不懂它的意思。例如,“student. a am I”
    剑指Offer(Java版)第四十九题:汇编语言中有一种移位指令叫做循环左移(ROL), 现在有个简单的任务,就是用字符串模拟这个指令的运算结果。 对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。 例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果, 即“XYZdefabc”。是不是很简单?OK,搞定它!
    【转载】Java 内存分配全面浅析
    【记】Linux下安装JDK1.7
    【ZooKeeper】典型应用场景概览
    正则表达式工具RegexBuddy
    【基础】RandomAccess
    【JNDI】Java Naming and Directory Interface
    【AOP】Cglib动态代理实现方式
    【事务】分布式事物原理
  • 原文地址:https://www.cnblogs.com/zengkefu/p/4952818.html
Copyright © 2020-2023  润新知