(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命令断开连接,让被调试的进程可以继续正常运行。