(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命令斷開連接,讓被調試的進程可以繼續正常運行。