shell之調試&分析

gdb調試

語句 含義
gcc -g 編譯源碼確保含有-g的參數
gdb ./app 啓動gdb並開始調試程序app
(gdb)set args x1 y1 設置app運行的參數(./app x1 y1)
(gdb) r 開始運行程序(run的簡寫)
(gdb) l 列舉調試的源碼(list的簡寫)
(gdb) b 16 在代碼16行設置斷點
(gdb)b main.cpp:12 在main.cpp文件的12行設置斷點
(gdb)b onRecv 在onRecv函數設置斷點
(gdb)info break 查看所有的斷點
(gdb)info break 3 查看第3個斷點
(gdb)n 單行執行,有函數不會進入函數(next簡寫)
(gdb)s 單步執行,有函數會跳入函數(step簡寫)
(gdb)finish 退出函數
(gdb)c 繼續運行(continue簡寫)
(gdb)q 退出調試(quit簡寫)
(gdb)p a int a = add(1,2);

如果在上述代碼附近設置斷點後,查看a的值(print的簡寫)

tcpdump

  • tcpdump -n -i eth0 host 192.168.31.147 and 114.114.114.114
    截取本機192.168.31.147和主機114.114.114.114之間的通信數據
  • tcpdump -n -i eth0 dst 192.168.31.147
  • tcpdump -n -i eth0 dst 192.168.31.147 or 192.168.31.157
    截取所有進入本機的數據(或多個IP)
  • tcpdump -n -i eth0 dst 192.168.31.147 or 192.168.31.157 and tcp
    抓取進入本機的所有tcp數據包
  • tcpdump -n -i eth0 src 192.168.31.147 or 192.168.31.157
  • tcpdump -n -i eth0 src 192.168.31.147 and port ! 22 and tcp
    抓取從本機發出的數據包(and or進行條件篩選端口)
  • tcpdump host 192.168.1.142
    截獲主機所有的收發的數據

strace

  • strace –o log.txt app
    執行app程序,並將其涉及的所有系統調用輸出到log.txt中
  • strace –o log.txt –p pid
    查看指定進程號的程序對應的系統調用的過程

valgrind

  • 安裝valgrind
    Yum install valgrind
  • 生成內存泄露信息
    valgrind –tool=memcheck –leak-check=yes –log-file=mem.txt ./app
  • definitely lost
    肯定泄露部分
  • possibly lost
    可能泄露部分
  • indirectly lost
    間接泄露
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章