说明:gdb可以实现源代码单步调试

原理:

1、gdb在PC机上运行,gdbserver在arm开发板上运行,gdbserver在开发板上相当于父进程,应用相当于子进程,PC上gdb发命令给gdbserver,gdbserver在发命令给应用子进程

2、gdb在运行的时候需要一个带有调试信息的app文件,比如gdb要读应用中某个变量的值,这个文件就提供了变量的地址

(eclipse是一种gdb前台图像界面工具,有空可以研究下)

编译gdb,gdbserver
tar xjf gdb-7.4.tar.bz2
cd gdb-7.4/
./configure --target=arm-linux(target指的意思是用于arm版,host指的意思是运行环境,默认是PC,在这里可以不用设置)
make(make  install prefix=$PWD/tmp )
把arm-linux-gdb(如果make的时候安装到/tmp目录下时,其在tmp下的bin下面)复制到/bin目录

cd gdb/gdbserver/
./configure --host=arm-linux

make

报错:提示linux-arm-low.c 中PTRACE_GETSIGINFO undeclared未定义

进入交叉编译工具链中执行grep “PTRACE_GETSIGINFO” *nR,发现在include/linux/ptrace.h中有定义,查看linux-arm-low.c,发现其是include <sys/ptrace.h>,包含的有问题,改为<linux/ptrace.h>
cp gdbserver /work/nfs_root/first_fs/bin

编译要调试的应用程序,编译时加上-g选项,用于生成gdb需要的应用程序调试信息,信息和程序包含在一起

调试:
1. 在ARM板上
gdbserver 192.168.1.17:2345 ./test_debug //2345端口随便写,ip是开发板自己的ip

2. 在PC上
/bin/arm-linux-gdb ./test_debug
输入:target remote 192.168.1.17:2345
然后: 使用gdb命令来控制程序

l命令是list的意思,会打印全部应用程序源码

break 函数名  其会函数中变量定义下面打上断点,支持c命令,运行(continue)

break 应用名.c:行号,可以在文件中第几行打上断点

step  单步执行,遇到函数会进入函数   next 单步执行,不会进一个函数  nexti执行下一条汇编

print 变量  会打印变量的值

另一种方法:
让程序在开发板上直接运行,当它发生错误时,令它产生core dump文件
然后使用gdb根据core dump文件找到发生错误的地方
在ARM板上:
1. ulimit -c unlimited(设置core文件的大小)
2. 执行应用程序 : 程序出错时会在当前目录下生成名为core的文件

在PC上:
3. /bin/arm-linux-gdb ./test_debug ./core 会直接运行,并打印出错信息
4、在执行 backstrace或者backtrace指令可以参看出错的函数调用关系,命令简写bt

29、应用调试之使用GDB来调试应用程序的更多相关文章

  1. 在 Python 中使用 GDB 来调试 转载

    2013/11/01 | Comments 大约一年前,我接触了 Java 中的 Btrace 能够不停机查看线上 JVM 运行情况的特性让我艳羡不已. 另外还有强悍的 jStack 和 jConso ...

  2. Linux下调试段错误 (gdb,core,ulimit)

    Linux环境下经常遇到某个进程挂掉而找不到原因,我们可以通过生成core file文件加上gdb来定位. (1)首先 在makefile中要增加编译调试选项 -g,才可以利用下面的gdb来调试 gc ...

  3. GDB之调试器用法

    GDB 完成的作用: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式 当程序被停住时,可以检查此时程序中所发生的事,并追索上文 动 ...

  4. gdb可以调试python的pdb么

    1.如题: gdb可以调试python的pdb么? 答案:可以,实验如下. 2.实验: 生成一个a.py代码文件,代码如下: import pdb a = 1 print "111" ...

  5. Window平台Grmon下如何使用gdb进行调试

    Window平台Grmon下如何使用gdb进行调试 1输入cmd命令,打开其窗口,进入你要执行的文件目录下 2.连接开发板,输入grmon –altjtag –u 3.连上后,输入gdb命令 4.再输 ...

  6. GDB代码调试与使用

    GDB代码调试与使用 Linux下GDB调试代码 源代码 编译生成执行文件 gcc -g test.c -o test 使用GDB调试 启动GDB:gdb test 从第一行列出源代码:list 直接 ...

  7. gdb 多线程调试

    gdb 多线程调试 http://hi.baidu.com/hcq11/blog/item/9f5bfc6e696209d680cb4a25.html  http://hi.baidu.com/lit ...

  8. GDB多线程调试

    一.多线程调试1. 多线程调试,最重要的几个命令:info threads                        查看当前进程的线程.                              ...

  9. ida GDB 远程调试

    在看雪上回答的问题,有人问在WinDbg下断KiDebugRoutine或者KdEnterDebugger函数会引发蓝屏!因为是在调试Windows的内核调试引擎,我给出的解决办法是用不依赖Windo ...

随机推荐

  1. 【Codeforces Round #457 (Div. 2) B】Jamie and Binary Sequence

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把n分解成二进制的形式. n=2^a0+2^a1+...+2^a[q-1] 则固定就是长度为q的序列. 要想扩展为长为k的序列. 可 ...

  2. wmic linux python

    sudo aptitude install wmi-client Example of usage is; wmic -U DOMAIN/administrator%password //10.99. ...

  3. 測试CPU支持指令集AVX,AVX2,SSE情况的代码【VS2010调试通过】

    完整代码例如以下所看到的 http://download.csdn.net/detail/vbskj/7723827 本人的測试结果 watermark/2/text/aHR0cDovL2Jsb2cu ...

  4. struts2中action手动获取參数

    struts2中action手动获取Session,jsp页面參数 1. ActionContext 在Struts2开发中,除了将请求參数自己主动设置到Action的字段中,我们往往也须要在Acti ...

  5. php全局变量的使用

    php全局变量的使用 一.总结 1.php的全局变量:php的全局变量和C++,Java的全局变量不一样 2.页面嵌套php:我在html页面中嵌套php代码的时候,php的全局变量好像和C++,Ja ...

  6. Date类的用法

    package example; import java.text.DateFormat; import java.text.ParseException; import java.text.Simp ...

  7. 矩阵乘法java代码实现

    矩阵只有当左边矩阵的列数等于右边矩阵的行数时,它们才可以相乘, 乘积矩阵的行数等于左边矩阵的行数,乘积矩阵的列数等于右边矩阵的列数 即A矩阵m*n,B矩阵n*p,C矩阵m*p: package exa ...

  8. Swagger文档转Word

    Swagger文档转Word 文档   GitHub 地址:https://github.com/JMCuixy/SwaggerToWord/tree/developer 原创作品,转载请注明出处:h ...

  9. 1.21 Python基础知识 - python常用模块-2

    一.xml 什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 X ...

  10. python路径找类并获取静态字段

    Python通过路径找类并获取其中大写的静态字段 settings.py class Foo: DEBUG = True TEST = True xx.py import importlib path ...