gdb调试之linux pc和linux arm环境下

Linux PC应用程序gdb调试:

1、查看core文件参数
[email protected]:~/File_unzip/cp_module$ ulimit -a

core file size          (blocks, -c) 0        //产生core文件数目,不会产生core文件

data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31042
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192        //应用程序栈大小
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31042
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2、设置产生core文件大小

ulimit -c unlimited(不限制core文件的大小)

(默认不会现实PID信息,可通过以下命令修改此文件:
 echo "1" > /proc/sys/kernel/core_uses_pid , 这样每次程序挂了之后会生成类似
core.8909(8909是当时的进程号), 效果就是后续生成的core文件不会覆盖之前生成的core文件。)

3、产生段错误之后,查看进程信息

gcc -g test.c -o test (设置gdb调试)

ls -l core.*

4、使用gdb调试core文件之前操作

查看core文件信息:file core

5、使用gdb调试core文件

gdb --core=core.PID

(gdb)bt(第一次不会出现堆栈信息)

(gdb)file ./a.out(运行程序)

(gdb)bt(backtrace信息出现)

(可直接使用命令:ulimit -a; ulimit -c unlimited;ulimit -a;echo "1" > /proc/sys/kernel/core_uses_pid)

Linux arm应用程序arm-XXXX-gdb调试:

1、查看core文件参数
[email protected]:~/File_unzip/cp_module$ ulimit -a

core file size          (blocks, -c) 0        //产生core文件数目,不会产生core文件

data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31042
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31042
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2、设置产生core文件大小

ulimit -c unlimited(不限制core文件的大小)

(默认不会现实PID信息,可通过以下命令修改此文件:
 echo "1" > /proc/sys/kernel/core_uses_pid , 这样每次程序挂了之后会生成类似
core.8909(8909是当时的进程号), 效果就是后续生成的core文件不会覆盖之前生成的core文件。)

3、编译程序选项

加入gdb可调试选项 arm-linux-XXX -g test.c -o test

4、构建GDB+GDB server nfs调试方法

(1)确保arm开发板与主机支持nfs功能,设置开发板和主机在同一网段,并设置共享目录(如/mnt/nfs)。

(2)将编译器对应该的gdbserver和test(可执行文件)拷贝到共享目录(/mnt/nfs),修改应用程序和 gdbserver权限为777.

(3)通过telnet或者minicom登陆到开发板,挂在nfs文件系统:mount -t nfs 主机IP:/mnt/nfs(共享目录) /home/root/modbus_rtu_slave(开发板目录) -o nolock

(4)进入共享目录 运行gdbserver建立远程调试server(格式为: ./gdbserver 主机IP:建立连接的端口号 可执行文件【其中端口号一般1024以上没有占用即可】,如下)

./gdbserver 10.10.51.47:5000 test

(5)在主机目录下运行可执行程序:

arm-linux-gdb test

---》target remote 10.10.51.33:5000    (进入gdb调试后运行命令,连接gdbserver)

注释:

set
solib-absolute-prefix与set
solib-search-path命令分别用于设置GDB共享库查找路径前缀与共享库查找路径,以阻止GDB查找宿主机上的库。若不指定这些路径,远程调试过程中GDB加载了宿主机的库,会出现诸如“warning:
GDB can‘t find the start of the function at 0x******”与“Cannot find
bounds of current function”等错误提示。

文章主要主要来自参考、总结和实践。

时间: 2024-12-16 13:33:47

gdb调试之linux pc和linux arm环境下的相关文章

在Linux PC上查看arm交叉编译的可执行文件依赖的动态库

在Ubuntu宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,类似于PC linux上的ldd命令.? ? 在电脑上安装的Linux系统中,有一个ldd命令,可以查看对应的可执行文件或库文件依赖哪些库,但可执行文件或库文件要求与操作系统的编译器类型相同,即电脑是X86的GCC编译器,那么无法通过ldd命令查看ARM交叉编译器编译出来的可执行文件或库文件. 如果想在Ubuntu等Linux宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,可以采用下面的命令: arm-

linux 命令快捷键(xshell环境下)

##快捷键 linux tab  ==  命令补全,路径补全.如果tab不到,就代表对于当前用户环境系统找不到这个目录或者路径,有可能有,但是没有放在PATH中 ctrl + a  ==  a:26个字母的第一个 把光标移动到命令的最前面 ctrl + e  ==  e:end  把光标移动到命令的末尾 ctrl + u  == 光标以前的删掉 ctrl + k  ==  光标以后的删掉 ctrl + c  ==  中断当前命令 ctrl + d  ==  中断当前连接 ctrl + inser

Linux CentOS 6.5 操作环境下 Apache服务的 停止、启动、重新启动操作

基本的操作方法:本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令:推荐/usr/local/apache2/bin/apachectl start apaceh启动 apache停止命令/usr/local/apache2/bin/apachectl stop   停止 apache重新启动命令:/usr/local/apache2/bin/apachectl restart 重启 要在重启 Apache 服务器时不中断当前的连接

Linux CentOS 6.5 操作环境下修改mysql数据库密码

修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password "test123"Enter password: [输入原来的密码] 方法二:通过登录mysql系统,# mysql -uroot -pEnter password: [输入原来的密码]mysql>use mysql;mysql> update user set password=pass

LNMP(Linux+Nginx+Mysql+PHP)环境下安装yaf框架并编写一个MVC例子

1.下载yaf源码包yaf-2.2.9.tar.gz,并将其上传到服务器指定的位置,然后解压并安装: [[email protected] src]# tar -xvf yaf-2.2.9.tar.gz 进入解压后的目录: [[email protected] src]# cd yaf-2.2.9 一次执行: [[email protected] yaf-2.2.9]# /usr/local/php/bin/phpize [[email protected] yaf-2.2.9]# ./conf

Linux乐彩平台搭建环境下Memcached安装及问题解决

一. 乐彩平台搭建安装论坛:haozbbs.com Q1446595067 步骤 1.1 安装libevent,当前最新版本为2.1.8,官网:http://libevent.org/ wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz 1.2 解压 tar -xvf libevent-2.1.8-stable.tar.gz 1.

linux环境下安装qt过程

linux(虚拟机fedora9)环境下安装qt的过程主要是按照下面几网页上的教程完成的. http://mobile.51cto.com/symbian-272869.htm http://www.cnblogs.com/emouse/archive/2013/01/28/2880142.html http://wenku.baidu.com/link?url=7ipijK8ujQqvEkV4aJVD8L2CZqMEaejNJhoIS6hY8dCI0VTRDzRsqpNKyahl9DarynH

Hadoop化繁为简-从安装Linux到搭建集群环境

简介与环境准备 hadoop的核心是分布式文件系统HDFS以及批处理计算MapReduce.近年,随着大数据.云计算.物联网的兴起,也极大的吸引了我的兴趣,看了网上很多文章,感觉还是云里雾里,很多不必要的配置都在入门教程出现.通过思考总结与相关教程,我想通过简单的方式传递给同样想入门hadoop的同学.其实,如果你有很好的Java基础,当你入门以后,你会感觉到hadoop其实也是很简单的,大数据无非就是数据量大,需要很多机器共同来完成存储工作,云计算无非就是多台机器一起运算. 操作建议:理论先了

linux平台学x86汇编(五):使用gdb调试汇编程序

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 正如C语言一样,编写所有语言程序一样会出现一些一些错误,发生错误时,我们可以使用调试器一步一步运行程序以监视数据是如何被处理的.本节使用GNU调试器检查上一节hello程序,监视处理过程中寄存器和内存的值的变化.要调试汇编语言程序,在编译时,需要使用-gstabs参数重新汇编源代码,使用了该参数编译出来的可执行文件要比之前稍大一些,因为添加了附加信息.上一节程序不使用-gst