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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM