Linux下常用调试工具总结

Posted ladawn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下常用调试工具总结相关的知识,希望对你有一定的参考价值。

kdump+crash使用:
       kdump是linux下分析内核崩溃原因的工具。系统崩溃时,kdump用于转储运行内存,捕获当前运行信息,将此时内存中所有运行状态和数据信息收集到一个dump core文件中(一般是在var/crash中的vmcore),以便后续分析。(ps:虚拟机中设置的crash memory为256M,过大或过小都不行)     
       crash是用于分析kdump生成的core文件的工具。crash常用的指令:
          (1)log:显示内核消息缓存区 
          (2)bt:显示内核崩溃前的堆栈信息(可以指定进程号,如:bt <pid>)
          (3)ps:显示系统中进程状态
          (4)dis:对给定地址进行反汇编
       其中,我们在项目中常用到的指令是log、bt和dis,具体而言:
         (1)在代码中写入printk打印的某些信息,在内核崩溃后用log指令查看。
         (2)bt显示内核崩溃前的堆栈信息,找到其中的崩溃点RIP,再用dis反汇编RIP提供的地址,从而找到程序中出错的位置(具体到函数指令)
 
 
vim使用:
    vim是linux下编写程序的环境工具,通过vim /usr/code.cpp指令打开,常用指令如下:
       (1)正常模式下光标上下左右:           h:左        j:下        k:上          l:右
       (2)正常模式下保存和退出:           不保存退出::q            保存退出::wq    (ps:q或wq后加!表示强制退出
       (3)正常模式下删除:                 单个字符:x         整行:dd         光标至行末:d$   
       (4)正常模式下撤销:               撤销最后指令:u
       (5)正常模式下置入:               将最后删除的内容复制到光标处:p
       (6)正常模式下替换:                将光标所有字符替换为指定字符:r字符
       (7)正常模式下跳转:               跳转至最后一行:Shift-G         跳转至指定行21:输入21后输入Shift-G
       (8)正常模式下搜索:                搜索"int":/int          查找下一个:n
       (9)正常模式下复制:                复制n个整行:nyy           复制至行尾:y$        复制指定n0-n1行置n2行:  :n0,n1 co n2   
       (10)正常模式进入插入模式:         从光标处插入:i             从光标下一行插入:o             从光标下一字符插入:a
    
 
gdb使用:
    gdb是linux下的程序调试工具,可以进行设置断点和单步执行、检测死锁操作等。
       (1)启动gdb调试:     gdb 程序路径(ps:gdb /usr/code/bucket) 
       (2)设置断点:          1.  b 程序名:行号(ps:b bucket.cpp:21)         2.   b 程序名:函数名(ps:b bucket.cpp:main
       (3)运行到断点处:     r (ps:r会运行到断点处,并显示断点行代码和断点所在函数
       (4)查看断点:          info breakpoints(ps:会显示断点编号、类型、所属行数和函数
       (5)删除断点:          delete 断点编号
       (6)显示断点周围代码: l
       (7)单步执行:         会进入中间调用函数的单步:s           会跳过中间调用函数的单步:n
       (8)继续执行:           c
       (9)查看和设置变量:        查看变量i:p i             设置变量i的值为5: set i = 5
      (10)退出gdb:          q
 
 
netstat使用:
      netstat是linux系统用于监测TCP/IP网络的工具,可以监听TCP、UDP、ICMP等网络连接,以及查看路由表等功能。常用的指令有:
        (1)netstat -a     列出所有连接
        (2)netstat -t      列出TCP连接
        (3)netstat -u     列出UDP连接
        (4)netstat -c     持续列出连接
        (5)netstat -s     显示连接统计信息
        (6)netstat -n     直接使用IP而不通过DNS
        (7)netstat -p     显示PID和进程名称
        (8)netstat -r     显示内核IP路由表
      实际中常用的复合指令是:
            netstat -actnp | grep 80          持续显示所有80端口的tcp连接,并且显示进程和PID
            netstat -actnp | grep chrome   持续显示所有chrome进程的tcp连接
 
 
 
tcpdump使用:
      tcpdump是linux下的抓包工具,可以将网络中传输数据包的报头完全截获下来提供分析。可以只抓tcp的SYN或ACK等特定包,也可以只抓HTTP的POST或GET指令的包等等。常用的指令有:
        (1)tcpdump -i eth0               -i表示指定抓包的接口,如:eth0、wlan0等等(ifconfig中inet有值都可以抓)
        (2)tcpdump -A                     -A表示以ascii的形式显示每一个数据包
        (3)tcpdump -c  100              -c表示抓取指定数量的包,如抓100个就是tcpdump -c 100
        (4)tcpdump -t                      -t表示不显示时间戳
        (4)tcpdump host                   host后可以加IP或域名,如:host www.baidu.com
        (5)tcpdump port                   port后加监听的端口号,如:port 80
        (6)tcpdump src net               src net后接源IP地址
        (7)tcpdump -w ./data.cap      -w使输出的信息保存到./data.cap中,方便之后分析
      实际中常用的指令是:
            tcpdump -i eth9 -t -A -c 100 host www.baidu.com and port 80 -w ./data.cap
 
 
 
ipcs使用:
      ipcs是linux下用于查看进程间通信的共享内存、消息队列、信号量的信息的工具。常用的指令有:
        (1)ipcs -a                  查看linux下共享内存、消息队列、信号量的所有信息,包括:key、ID、拥有者、字节数、状态等等。
        (2)ipcs -p                  查看linux下共享内存、消息队列的相关进程号,如:消息队列的发送进程和接收进程的PID。
        (3)ipcs -u                  查看linux下共享内存、消息队列、信号量已使用的资源情况。
        (4)ipcs -l                   查看linux下共享内存、消息队列、信号量的系统资源限制情况,如:最大个数、最大占用空间等。
        (5)ipcs -t                   查看linux下共享内存、消息队列、信号量的创建和断开时间。
        (6)ipcs -m -q -s          -m表示查看共享内存,-q表示查看消息队列,-s表示查看信号量。
 
 
ipcrm使用:
      ipcrm是linux下用于删除共享内存、消息队列、信号量的IPC资源的工具。常用的指令有:
        (1)ipcrm -M key            通过key删除共享内存
        (2)ipcrm -m id               通过id删除共享内存
        (3)ipcrm -Q key            通过key删除消息队列
        (4)ipcrm -q id                通过id删除消息队列
        (5)ipcrm -S key            通过key删除信号量
        (6)ipcrm -s id                通过id删除信号量
 

以上是关于Linux下常用调试工具总结的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu下linux内核源码阅读工具和调试方法总结

C#编程常用工具总结

Linux常用命令总结

07 linux 一个完整的shell脚本调试工具

#导入Word文档图片# Linux下GDB调试工具的运用

linux下如何使用gdb调试