博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
调试技术 - Orisun - 博客园
阅读量:6454 次
发布时间:2019-06-23

本文共 2138 字,大约阅读时间需要 7 分钟。

    华夏35度
    Data Mining,NLP,Search Engine
    调试技术
    GDB
    (gdb) r 65536 hello      带参数运行
    可以用ps | grep ×××或pstree来查看进程ID
    attach <PID>        挂接已经运行的程序,即调试正在运行的程序
    detach <PID>        取消挂载
    watch <expression>    一旦表达式值有变化时,马上停止程序
    gdb调试过程中查看源代码
    list  
    list <line-number>
    list <function>
    单步调试可以用n(ext)和s(tep),step进入函数内部,next不进入
    在指定函数处设置断点b sum
    set args "zcy"--指定运行时参数
    show args--查看设定好的运行时参数
    shell command--直接在调试时运行shell命令
    break 行号或函数名 if   条件表达式 --设置断点
    tbreak 行号或函数名 if  条件表达式 --设置临时断点,到达后被自动删除
    delete 断点号 --删除指定断点,其断点号为“info b”中的第一栏。若缺省断点号则删除所有断点
    disable 断点号 --停止指定断点,使用“info b”仍能查看此断点。同 delete 一样, 省断点号则停止所有断点
    enable 断点号 --激活指定断点,即激活被 disable 停止的断点
    condition 断点号 if <条件表达式> --修改对应断点的条件
    c --继续执行函数,直到函数结束或遇到新的断点
    
    ignore 断点号<num> 在程序执行中,忽略对应断点 num 次
    
    wahtis p  查看变量类型
    backtrace(或bt)查看栈信息
    当调用一个函数时,函数的地址、参数、局部变量都会被压入栈中。
    每个函数都对应一个frame,发生函数调用时frame就会有很多层。
    frame 0  查看第0层即栈顶frame
    up     向上移动frame
    down    向下移动frame
    info register  查看寄存器信息
    多进程调试
    (gdb) follow-fork-mode parent        fork之后继续调试父进程,子进程不受影响
    (gdb) follow-fork-mode child        fork之后调试子进程,父子进程不受影响
    (gdb) set detach-on-fork on         断开调试follow-fork-mode指定的进程
    (gdb) set detach-on-fork off    gdb将继续控制子进程和父进程。follow-fork-mode指定的进程将被调试,另一个进程处于suspend状态
    多线程调试
    info threads      显示所有线程的概要信息
    thread <threadno>  把进程号为threadno的进程设为当前进程
    break <linenumber> thread <threadno>  设置断点时同进指定行号和进程号
    远程调试
    
    gdbserver+gdb  gdb运行在主机上,gdbserver运行在目标环境上
    下载gdb包解压
    cd gdb-6.6
    ./configure --target=arm-linux
    make
    sudo make install
    这是编译用于主机上的gdb程序
    cd gdb/gdbserver/
    ./configure --target=arm-linux --host=arm-linux
    make CC=/opt/EmbedSky/4.3.3/bin/arm-linux-gcc
    sudo make install
    把生成的gdbserver下载到开发板上
    在PC上用arm-linux-gcc -ggdb编程程序test.c,把test下载到开发板上,同时test也要保留在PC上
    gdb和gdbserver之间可以通过TCP(格式为host:port)、UDP(格式为udp:host:port)或者串口来通信。
    以TCP为例:
    在开发板上#gdbserver 192.168.0.100:5678 ./overflow   192.168.0.100是主机IP
    在主机上$arm-linux-gdb ./overflow
    (gdb)target remote 192.168.0.102:5678        192.168.0.102是开发板IP
    更详细的介绍参见 http://blog.csdn.net/shawnrong/archive/2007/08/16/1745998.aspx
    和 http://blog.ednchina.com/baifanshuishou/1968826/message.aspx
    图形化调试
    使用DDD(Data Display Debugger)
    原文来自:博客园(华夏35度)http://www.cnblogs.com/zhangchaoyang 作者:Orisun

你可能感兴趣的文章
Hive 简单操作
查看>>
湘潭1247 Pair-Pair(树状数组)
查看>>
IEnumerable<T>
查看>>
IntelliJ IDEA 注册码
查看>>
linux 上面配置apache2的虚拟目录
查看>>
Linux学习总结 (未完待续...)
查看>>
NoSQL数据库探讨 - 为什么要用非关系数据库?
查看>>
String字符串的截取
查看>>
switch函数——Gevent源码分析
查看>>
Spring MVC简单原理
查看>>
DynamoDB Local for Desktop Development
查看>>
ANDROID的SENSOR相关信息
查看>>
laravel 使用QQ邮箱发送邮件
查看>>
用javascript验证哥德巴赫猜想
查看>>
Shell编程-环境变量配置文件
查看>>
thymeleaf 中文乱码问题
查看>>
(转)CSS浮动(float,clear)通俗讲解
查看>>
os.walk函数
查看>>
[Unity3d]DrawCall优化手记
查看>>
细数.NET 中那些ORM框架 —— 谈谈这些天的收获之一
查看>>