zoukankan      html  css  js  c++  java
  • gdb 条件断点 + 多线程 +attach

    (gdb) stop
    (gdb) b rte_pktmbuf_free  thread all
    Junk after thread keyword.
    (gdb) c
    Continuing.
    break if
    用法:
    break [break-args] if (condition)
    例如:
    
    break main if argc > 1
    break 180 if (string == NULL && i < 0)
    break test.c:34 if (x & y) == 1
    break myfunc if i % (j + 3) != 0
    break 44 if strlen(mystring) == 0

    (gdb) info threads
      Id   Target Id         Frame 
      4    Thread 0xffff98fad910 (LWP 44106) "eal-intr-thread" 0x0000ffff990cf7c4 in __GI_epoll_pwait (epfd=6, 
        events=0xffff98facfe0, maxevents=<optimized out>, timeout=<optimized out>, set=0x0)
        at ../sysdeps/unix/sysv/linux/epoll_pwait.c:48
      3    Thread 0xffff9879d910 (LWP 44107) "rte_mp_handle" 0x0000ffff9918f928 in recvmsg ()
        at ../sysdeps/unix/syscall-template.S:83
      2    Thread 0xffff97f7d910 (LWP 44108) "lcore-slave-2" hinic_recv_pkts (rx_queue=0x13fe9be80, 
        rx_pkts=0xffff97f7ce80, nb_pkts=32) at /data1/dpdk-19.11/drivers/net/hinic/hinic_pmd_rx.c:977
    * 1    Thread 0xffff99375510 (LWP 44105) "pingpong" rte_eal_wait_lcore (slave_id=2)
        at /data1/dpdk-19.11/lib/librte_eal/common/eal_common_launch.c:30
    (gdb) thread 2  
    [Switching to thread 2 (Thread 0xffff97f7d910 (LWP 44108))]
    #0  hinic_recv_pkts (rx_queue=0x13fe9be80, rx_pkts=0xffff97f7ce80, nb_pkts=32)
        at /data1/dpdk-19.11/drivers/net/hinic/hinic_pmd_rx.c:977
    977                             break;
    (gdb) bt
    #0  hinic_recv_pkts (rx_queue=0x13fe9be80, rx_pkts=0xffff97f7ce80, nb_pkts=32)
        at /data1/dpdk-19.11/drivers/net/hinic/hinic_pmd_rx.c:977
    #1  0x0000000000465728 in reply_to_icmp_echo_rqsts ()
    #2  0x00000000004674fc in pong_launch_one_lcore ()
    #3  0x0000000000593ae8 in eal_thread_loop (arg=0x0)
        at /data1/dpdk-19.11/lib/librte_eal/linux/eal/eal_thread.c:153
    #4  0x0000ffff99187d38 in start_thread (arg=0xffff97f7d910) at pthread_create.c:309
    #5  0x0000ffff990cf5f0 in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:91
    (gdb) 
    (gdb) b rte_pktmbuf_prefree_seg
    Breakpoint 1 at 0x467cf0: rte_pktmbuf_prefree_seg. (146 locations)
    (gdb) thread apply all bt
    
    Thread 4 (Thread 0xffff98fad910 (LWP 44106)):
    #0  0x0000ffff990cf7c4 in __GI_epoll_pwait (epfd=6, events=0xffff98facfe0, maxevents=<optimized out>, 
        timeout=<optimized out>, set=0x0) at ../sysdeps/unix/sysv/linux/epoll_pwait.c:48
    #1  0x000000000059d790 in eal_intr_handle_interrupts (pfd=6, totalfds=2)
        at /data1/dpdk-19.11/lib/librte_eal/linux/eal/eal_interrupts.c:1016
    #2  0x000000000059d9b8 in eal_intr_thread_main (arg=0x0)
        at /data1/dpdk-19.11/lib/librte_eal/linux/eal/eal_interrupts.c:1100
    #3  0x00000000005ada7c in rte_thread_init (arg=0x3c9e1810)
        at /data1/dpdk-19.11/lib/librte_eal/common/eal_common_thread.c:165
    #4  0x0000ffff99187d38 in start_thread (arg=0xffff98fad910) at pthread_create.c:309
    #5  0x0000ffff990cf5f0 in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:91
    
    Thread 3 (Thread 0xffff9879d910 (LWP 44107)):
    #0  0x0000ffff9918f928 in recvmsg () at ../sysdeps/unix/syscall-template.S:83
    #1  0x00000000005ae038 in read_msg (m=0xffff9879cf40, s=0xffff9879ced0)
        at /data1/dpdk-19.11/lib/librte_eal/common/eal_common_proc.c:279
    #2  0x00000000005ae450 in mp_handle (arg=0x0) at /data1/dpdk-19.11/lib/librte_eal/common/eal_common_proc.c:380
    #3  0x00000000005ada7c in rte_thread_init (arg=0x3c9e1810)
        at /data1/dpdk-19.11/lib/librte_eal/common/eal_common_thread.c:165
    #4  0x0000ffff99187d38 in start_thread (arg=0xffff9879d910) at pthread_create.c:309
    #5  0x0000ffff990cf5f0 in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:91
    
    Thread 2 (Thread 0xffff97f7d910 (LWP 44108)):
    #0  0x0000000000787064 in hinic_recv_pkts (rx_queue=0x13fe9be80, rx_pkts=0xffff97f7ce80, nb_pkts=32)
        at /data1/dpdk-19.11/drivers/net/hinic/hinic_pmd_rx.c:954
    #1  0x0000000000465728 in reply_to_icmp_echo_rqsts ()
    #2  0x00000000004674fc in pong_launch_one_lcore ()
    #3  0x0000000000593ae8 in eal_thread_loop (arg=0x0)
        at /data1/dpdk-19.11/lib/librte_eal/linux/eal/eal_thread.c:153
    ---Type <return> to continue, or q <return> to quit---
    #4  0x0000ffff99187d38 in start_thread (arg=0xffff97f7d910) at pthread_create.c:309
    #5  0x0000ffff990cf5f0 in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:91
    
    Thread 1 (Thread 0xffff99375510 (LWP 44105)):
    #0  0x00000000005a26ac in rte_eal_wait_lcore (slave_id=2)
        at /data1/dpdk-19.11/lib/librte_eal/common/eal_common_launch.c:29
    #1  0x0000000000465124 in main ()
    (gdb) 
    gdb调试正在运行的进程:
    
    GDB可以对正在执行的程序进行调度,它允许开发人员中断程序 并查看其状态,之后还能让这个程序正常地继续执行
    
    (gdb) attach xxxxx --- xxxxx为利用ps命令获得的子进程process id
    (gdb) stop --- 这点很重要,你需要先暂停那个子进程,然后设置一些断点和一些Watch
    (gdb) break 37 -- 在result = wib(value, div);这行设置一个断点,可以使用list命令察看源代码
    Breakpoint 1 at 0x10808: file eg1.c, line 37.
    (gdb) continue
    Continuing.
    
    Breakpoint 1, main () at eg1.c:37
    37                              result = wib(value, div);
    (gdb) step
    
     在完成调试之后,不要忘记用detach命令断开连接,让被调试的进程可以继续正常运行。
  • 相关阅读:
    Linux 网络流量实时监控工具之ntopng详解
    linux wget 命令用法详解(附实例说明)
    Linux curl使用简单介绍
    数据库中随机查询数据
    【算法】验证码识别基础方法及源码(转)
    CentOS 7静默(无图形化界面)安装Oracle 11g
    史上最详细最全的Linux上安装Oracle的教程-centos7
    如何实现Docker镜像和容器实例的备份迁移
    oozie timezone时区配置
    通过hue提交oozie定时任务
  • 原文地址:https://www.cnblogs.com/dream397/p/13674796.html
Copyright © 2011-2022 走看看