zoukankan      html  css  js  c++  java
  • 调试技术 Orisun 博客园

    调试技术 - 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

  • 相关阅读:
    数组元素的查找1
    排序——选择排序
    排序——冒泡排序
    内部类——匿名内部类
    跳一跳
    数组元素换位置游戏
    六 java和Tomcat
    九 Jenkins持续集成
    八 ip和子网详解
    七 Git版本控制
  • 原文地址:https://www.cnblogs.com/lexus/p/2951967.html
Copyright © 2011-2022 走看看