2015-11-30 21:31:08 qq_21792169 阅读数 18818
  • Linux系统安装

    1.linux开发系统安装配置 2.shell命令 3.VI编辑器 4.GCC/GDB 5.Makefile 6.ARM开发板说明 7.嵌入式交叉开发环境

    1733课时 0分钟 5985人学习 沈寒
    免费试看


在PC机下调试PC机程序:

gcc -g hello.c -o hello  @-o Specified Specified exec name -g debugging message 
gdb hello   @debugging program
break orr b params        @set breakpoint
b  function name
b line numbers
b file name + line numbers
b line numbers + if condition is  true 
 
run            @run program 


print + variable name  @display  variable value 
info  break orr b    @display all breakpoint numbers
delete breakpoint numbers  @delete the numbers breakpoint  
list orr l     @display  source code
next           @step by step running ,don't Entry sub function
step           @step by step running ,Entry sub function
continue orr c @high speed run as next breakpoint orr program end
finish       @running program utile Current function end
watch + variable value  @for the variable control 
q              @exit 


在开发板上调试交叉编译下的程序:在远程下调试。

1、Download GDB source code

website:ftp://ftp.gnu.org/gnu/gdb


2、compile GDB

# tar -xzvf gdb-7.4.tar.gz 

# cd gdb-7.4

# ./configure --target=arm-linux

#make

# mkdir tmp
# make install prefix=$PWD/tmp

#cp arm-linux-gdb  /bin


3、install board gdbserver:

#cd gdb/gdbserver/

#./configure --host=arm-linux

#make   (把生成的gdbserver复制到board的/bin目录下)


编译要调试的应用,编译时加上-g选项

 

4、cross compile gdbserver :


 5、debug

Board ip    = 210.41.141.111

Host pc ip = 210.41.141.155

 

Board:

#gdbserver 210.41.141.111:1111 ./test_debug      /*1111为端口号,可以随便设置*/

 

host pc:

(由于交叉编译自带gdb工具,所以这里要指定路径,不然会冲突)

#/bin/arm-linux-gdb   ./test_debug

(gdb)target remote 210.41.141.111:1111


....

链接成功后,gdb远程调试和gdb本地调试方法命令相同。


2019-11-06 18:31:22 skytering 阅读数 49
  • Linux系统安装

    1.linux开发系统安装配置 2.shell命令 3.VI编辑器 4.GCC/GDB 5.Makefile 6.ARM开发板说明 7.嵌入式交叉开发环境

    1733课时 0分钟 5985人学习 沈寒
    免费试看

windows端 调试linux/arm linux上运行的应用

linux/arm linux端上打开gdbserver:
gdbserver localhost:[端口,如2001] [程序路径] [参数]

windows pc端:
arm-none-linux-gnueabi-gdb -q swd
target remote [目标平台IP地址]:[端口,如2001]

ubuntu pc端:
arm-oe-linux-gnueabi-gdb -q swd
target remote [目标平台IP地址]:[端口,如2001]

linux/arm linux端直接调试

arm端调试
一种:gdb [程序路径] 后 程序运行参数。
set args 可指定运行时参数。(如:set args 10 20 30 40 50)
show args 命令可以查看设置好的运行参数。

或者:
gdb --args [程序路径] [参数]

gdb相关命令

r
开始运行程序
c
继续程序的运行,直到遇到下一个断点
f
查看栈帧
bt
产看函数调用信息(堆栈)
q
退出GDB环境
i
描述程序的状态
l
显示多行源代码

2019-01-18 15:43:58 hfyutdg 阅读数 542
  • Linux系统安装

    1.linux开发系统安装配置 2.shell命令 3.VI编辑器 4.GCC/GDB 5.Makefile 6.ARM开发板说明 7.嵌入式交叉开发环境

    1733课时 0分钟 5985人学习 沈寒
    免费试看
               
安装过程,如下:
下载gdb-7.5.tar.gz(http://www.gnu.org/software/gdb/download/)

1、将gdb-7.5.tar.gz拷贝的/usr/local/目录下(可以拷贝到任何你愿意的Linux目录下)

2、解压gdb-7.5.tar.gz
      tar -zxvf gdb-7.5.tar.gz

3、编译arm-linux-gdb 
   到目录gdb-7.5下
   cd gdb-7.5
   $./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
   target指明编译生成的GDB用于调试ARM-LINUX程序,prefix指明安装目录
   $make
   #make install
   #gedit /etc/environment --把arm-linux-gdb加入环境变量 (:/usr/local/arm-gdb/bin)
   #source /etc/environment  //更新环境变量
  这样就可以在/usr/local/arm-gdb/bin目录下看到如下三个可执行文件
  arm-linux-gdb arm-linux-gdbtui arm-linux-run

4. 关于arm-linux-gdb和gdb的使用方法一样,调试u-boot可以参考:

http://blog.163.com/nesnil@126/blog/static/380812982012223104416462/

http://blog.csdn.net/samantha_sun/article/details/6245504


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

2015-07-11 18:01:06 wuxiangege 阅读数 2955
  • Linux系统安装

    1.linux开发系统安装配置 2.shell命令 3.VI编辑器 4.GCC/GDB 5.Makefile 6.ARM开发板说明 7.嵌入式交叉开发环境

    1733课时 0分钟 5985人学习 沈寒
    免费试看

我根据arm-linux-gdb的调试对象,把调试分为二大类。即底层代码的调试,如u-boot、裸机程序等;或者应用程序的调试,即elf格式的可执行文件。根据我的经验,应用程序的调试相对要容易很多。下面,详细阐述调试经历……

 

应用篇:用arm-linux-gdb调试应用程序

开发机,即我电脑虚拟机中的ubuntu;目标机,即跑有linux系统的arm开发板。开发机和目标机通过网线连接在一个局域网内,一个网段,确保相互要ping得通。

在开发机中,通过minicom、ssh或者telnet登录开发板,要能看到开发板的文件系统。步骤如下:(ubuntuIP192.168.16.200 arm板的IP192.168.16.40,两者均使用2015端口通信

【1 打开终端,远程登录开发板】

wuxian@ubuntu:~$ ssh  root@192.168.16.40   

root@192.168.16.40's password: 123                

#                                      

 

【2 另启终端,编译elf可执行文件】

wuxian@ubuntu:~$ touch hello.c

1       #include<stdio.h>

2      

3       intmain(int argc, char *argv[])

4       {

5                for(inti=0; i<100; i++)

6                {

7                          printf("hello,world!\n");

8                }

9                return0;

11 }

wuxian@ubuntu:~$ arm-linux-gcc -g hello.c -o hello --std=c99

 

【3 拷贝文件到目标开发板】

wuxian@ubuntu:~$ scp ./hello root@192.168.16.40:/root

root@192.168.16.40's password:

hello                                         100%6200     6.1KB/s   00:00

 

【4 上目标机查看拷贝情况】

# ls

hello

# pwd

/root

#

 

【5 在目标机上打开gdbserver】准备为客户端arm-linux-gdb服务

# gdbserver 192.168.16.200:2015 hello  //192.168.16.200是开发机的ip2015是监听端口,

Process hello created; pid = 27991      //提示信息

Listening on port 2015

 

【6 在开发机上打开arm-linux-gdb】准备调试

wuxian@ubuntu:/opt/arm/4.3.2/bin$ ./arm-linux-gdb ~/hello

GNU gdb (Sourcery G++ Lite 2008q3-72)6.8.50.20080821-cvs

Copyright (C) 2008 Free SoftwareFoundation, Inc.

License GPLv3+: GNU GPL version 3 orlater <http://gnu.org/licenses/gpl.html>

This is free software: you are free tochange and redistribute it.

There is NO WARRANTY, to the extentpermitted by law.  Type "showcopying"

and "show warranty" fordetails.

This GDB was configured as "--host=i686-pc-linux-gnu--target=arm-none-linux-gnueabi".

For bug reporting instructions, pleasesee:

<https://support.codesourcery.com/GNUToolchain/>...

(gdb) target remote 192.168.16.40:2015

Remote debugging using192.168.16.40:2015

warning: Unable to find dynamic linkerbreakpoint function.

GDB will be unable to debug sharedlibrary initializers

and track explicitly loaded dynamiccode.

0x400cc8c0 in ?? ()

(gdb) l 1

1       #include<stdio.h>

2      

3       intmain(int argc, char *argv[])

4       {

5                for(inti=0; i<100; i++)

6                {

7                          printf("hello,world!\n");

8                }

9      

10              return0;

(gdb)

11     }

(gdb) b main

Breakpoint 1 at 0x8480: file hello.c,line 5.

(gdb) c

Continuing.

Error while mapping shared librarysections:

/lib/libc.so.0: No such file ordirectory.

Error while mapping shared librarysections:

/lib/ld-uClibc.so.0: No such file ordirectory.

 

Breakpoint 1, main (argc=1,argv=0xbe9bad74) at hello.c:5

5                for(inti=0; i<100; i++)

(gdb) n

7                          printf("hello,world!\n");

(gdb) n

5                for(inti=0; i<100; i++)

(gdb)

 

【7 再看看目标机上的反应

# gdbserver 192.168.16.200:2015 hello

Process hello created; pid = 27991

Listening on port 2015

Remote debugging from host 192.168.16.200

hello,world!

 

2016-04-12 00:05:47 yihongxiaoxiang 阅读数 0
  • Linux系统安装

    1.linux开发系统安装配置 2.shell命令 3.VI编辑器 4.GCC/GDB 5.Makefile 6.ARM开发板说明 7.嵌入式交叉开发环境

    1733课时 0分钟 5985人学习 沈寒
    免费试看

1、解压arm-linux-gdb-7.5.tar.gz 包:

tar -xvzf arm-linux-gdb-7.5.tar.gz

2、进入arm-linux-gdb-7.5目录并执行./build-all (记得此处需要切换到root权限)

3、 待安装成功之后检查安装的文件并将环境变量添加到.bashrc中

检查目录/opt/arm-linux-gdb/bin/下是否存在可执行文件arm-linux-gdb:ls /opt/arm-linux-gdb/bin/

如果存在就将/opt/arm-linux-gdb/bin/添加到.bashrc中:

export PATH=$PATH:/opt/arm-linux-gdb/bin/

4、执行arm-linux-gdb:结果出现下面的打印信息:


错误提示的意思是:加载共享库出错:libncurses.so.5:不能打开共享对象文件:没有这样的文件或目录

通过在网上搜索资料得到总结之后发现有下面三个原因可能会导致上述的错误出现:

a)、不存在libncurses.so.5这个动态库文件,改原因可以通过locate libncurses.so.5来排除,执行命令之后可以找到libncurses.so.5这个动态库文件,所以这个原因不是导致我现在的问题的情况。

b)、发现存在libncurses.so.5这个文件,但是可能没有将动态库的路径包含到查找目录下,通过cat /etc/ld.so.conf和ls /etc/ld.so.conf.d/目录发现确实不存在/usr/lib64/这个目录(该目录就是libncurses.so.5所在目录),然后添加lib64.conf来包含路径并执行ldconfig来是配置生效,结果还是不行。说明这个不一定是原因,为什么不一定后面再解释。


c)、动态库文件存在32位和64位的差异性导致的,通过file命令发现libncurses.so.5是一个链接文件,链接的文件是libncurses.so.5.9,而这个文件是一个64位的elf文件。


那这时我的arm-linux-gdb是什么文件类型呢?


如上图所示存在两个arm-linux-gdb文件,但是一个是/opt/目录下的事64位的文件,而/usr/目录下的是32位文件。最开始的时候我是没有执行上图中的操作而是直接以为没有安装32位的库导致的。所以通过yum list ncurses*查找到我需要安装的文件并安装。结果安装完成之后执行arm-linux-gdb是成功的。


但是这时我发现我运行的gdb版本不是我安装的版本,我安装的是7.5,但运行的确实 6.8.50.20080821-cvs,也就是说运行的查找路径出现错误了



这时我就怀疑是不是我的PATH路径不对呢?于是我echo $PATH之后是下面的结果


从上面的结果中明显可以看到直接运行arm-linux-gdb实际上是运行/usr/local/arm/4.3.2/bin/这个目录下的gdb文件,而不是/opt/arm-linux-gdb/bin/这个目录下,同时出现了好几个上述的两个路径,这又是什么原因呢?

原来是我添加的路径所在文件引起的,我在第三步中加arm-linux-gdb加入到了PATH中,但是.bashrc这个文件是bash shell的用户执行文件,也就是每运行一个bash shell就会把bash shell读取一次,而且PATH目录会增加一次,从而导致了多次出现两个路径,而且不会去除开始的路径,因为开始的路径/usr/local/arm/4.3.2/bin/是我上次添加交叉编译工具时添加的,这次重启之后已经自动添加了/usr/local/arm/4.3.2/bin/路径,而source /root/.bashrc只会在PATH后面添加路径,所以导致了上述的结果,于是我将PATH中的上述两个路径都删除掉,之后重新执行source /root/.bashrc,然后再执行arm-linux-gdb发现这时运行的就是7.5的版本。

然后问题就来了,第一、怎么来配置PATH的路径比较好呢?而不会导致路径的重复。第二、上述两个路径中的arm-linux-gdb有什么差别呢?第三、在ld.so.conf.d中的lib64.conf是否有必要呢?

第一、怎么来配置PATH的路径比较好呢?而不会导致路径的重复。

在解答之前先来比较一下几个添加路径文件的差异性吧。

.bashrc:这个文件是在用户每次进入bash shell时就会执行一次的,而且目录会被重复。

.bash_profile:这个目录也是设置PATH路径的,但这个文件只会在用户登录时执行一次。

/etc/profile:这个目录重要是为系统的每一个用户设置环境信息,当用户第一次登录时会被执行并从/etc/profile.d目录的配置文件中搜索shell的设置。

首先第一个已经排除,至于第二个和第三个,如果是只对当前的用户设置就推荐第二种,但是如果是对所有的用户都设置就推荐第三种方式。

第二、上述两个路径中的arm-linux-gdb有什么差别呢?

如下图所示

/opt目录下的事64位,/usr/目录下的事32位,但是我们一开始能够找到64的lib,所以如果运行的事/opt目录下的话就没有必要再重新安装32的lib呢?不过现在已经安装了,而且两个gdb都能够支持了。

第三、在ld.so.conf.d中的lib64.conf是否有必要呢?

我通过将lib64.conf移除并ldconfig之后重新执行arm-linux-gdb的7.5版也能够成功,所以个人认为没有必要添加上述文件。


上面就是这个安装过程中遇到的情况总结,一来可以记录自己的思路,同时也和大家一同分享,希望对大家能够有帮助!