zoukankan      html  css  js  c++  java
  • DM368 arm板GDB远程调试

    参考: http://www.erchashu.com/wiki/eclipse-cdt-gdb-arm-app-cross-debug

    远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。

    就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:

    • 普通列表项目用ROM Monitor调试目标机程序
    • 用KGDB调试系统内核
    • 用gdbserver调试用户空间程序

    这三种调试方法的区别主要在于,目标机远程调试stub 的存在形式的不同,而其设计思路和实现方法则是大致相同的。

    而我们最常用的是调试应用程序。就是采用gdb+gdbserver的方式进行调试。在很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序。采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。

    DM368提供了编译好的gdb:/opt/dvsdk/dvsdk_ipnctools/linux-devkit/bin/arm-arago-linux-gnueabi-gdb

    我们还需要自己编译gdbserver:

    到gdb官网下载gdb源码,这里选择6.8版本

    #cd /home
    
    #tar zxvf gdb-6.8a.tar.gz

    创建一个生成目录

    #cd /home
    
    #mkdir gdb-build
    
    #cd gdb-build
    
    #CC="/opt/dvsdk/dvsdk_ipnctools/linux-devkit/bin/arm-arago-linux-gnueabi-gcc" 
    AR="/opt/dvsdk/dvsdk_ipnctools/linux-devkit/bin/arm-arago-linux-gnueabi-ar" 
    /home/gdb-6.8/gdb/gdbserver/configure --target=arm-linux --host=arm-linux
    #make

    没有报错的话,就会在/home/gdb-build目录下生成gdbserver

    # file gdbserver
    gdbserver: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped

    下面我们通过tftp将gdbserver传送到DM368板子上,但是执行的时候报错:

    # gdbserver
    gdbserver: error while loading shared libraries: libthread_db.so.1: cannot open shared object file: No such file or directory

    经过排查,发现运行gdbserver还需要libthread_db库,有的板子自带这个库,有的没有带。

    于是自己copy一份到板子上:

    将/opt/dvsdk/dvsdk_ipnctools/linux-devkit/arm-arago-linux-gnueabi/lib/libthread_db-1.0.so文件copy到板子的/usr/lib目录,由于报错信息是缺libthread_db.so.1,所以我们需要建一个软连接:ln -s /usr/lib/libthread_db-1.0.so /usr/lib/libthread_db.so.1

    最后成功执行gdbserver:

    # gdbserver
    Usage:  gdbserver [OPTIONS] COMM PROG [ARGS ...]
            gdbserver [OPTIONS] --attach COMM PID
            gdbserver [OPTIONS] --multi COMM
    
    COMM may either be a tty device (for serial debugging), or
    HOST:PORT to listen for a TCP connection.
    
    Options:
      --debug               Enable debugging output.

     命令行远程调试

    在目标板上,运行 gdbserver 命令启动测试程序的调试,并指定目标板的IP和监听端口号,如:

    #gdbserver 192.168.188.120:12345 test (注,test 为要调试的程序)
    Process test created; pid = 625
    Listening on port 12345

    我们看到gdbserver已经正常启动了,正在等待客户端程序gdb的连接。

    此时我们在开发主机上运行 arm-linux-gdb,指定gdbserver的IP和端口,连接上去,如:

    # arm-arago-linux-gnueabi-gdb 
    (gdb) target remote 192.168.188.120:12345
    Remote debugging using 192.168.188.120:12345
    0x400b57f0 in ?? ()
    这时表示已经连接到远端的gdbserver并且开始调试了,此时目标板终端会显示“Remote debugging from host 192.168.188.201”,再次确认远程调试连接成功。接下来的调试方法与普通本机的gdb使用相同。
  • 相关阅读:
    【Silverlight】Bing Maps学习系列(八):使用Bing Maps Silverlight Control加载自己部署的Google Maps
    Visual Studio 2010在简洁中强调团队合作
    【Silverlight】Bing Maps学习系列(九):自定义功能导航条(Custom NavigationBar)
    Flash OBJECT 和 EMBED 标签
    SWFObject 的原站提供的使用说明
    一篇清楚阐述 JAvaScript 传递数据 到 Flash 的文章
    Flare 的 Edge边上加 Label
    借助 SWFObject 实现利用JavaScript嵌入 Flash
    3种基本的Flash/Javascript通信方式 (转)
    passing data from HTML to Flash
  • 原文地址:https://www.cnblogs.com/chinasun021/p/3205753.html
Copyright © 2011-2022 走看看