浙江省高等学校教师教育理论培训

微信搜索“毛凌志岗前心得”小程序

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

调试技术 - Orisun - 博客园


    华夏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

posted on 2013-03-09 21:14  lexus  阅读(241)  评论(0编辑  收藏  举报