应用调试_strace和gdb
strace
(1)先下载压缩包文件,解压编译生成一个strace可执行文件,并拷贝到开发板上
(2)strace的用法:可以用来解决一些简单的问题
1)strace -o log.txt ./firstdrvtest on //将追踪结果存入log.txt中
(3)strace原理:
starce -o log.txt APP //其中starce是父进程,APP是子进程
1)strace
2)APP子进程(open/read/write) ===> swi #val ===> swi异常 ===> vector_swi
3)vector_swi:
1、先判断是否stracing
2、若是,发信号给父进程
3、父进程处理后(比如记录),让子进程继续运行
GDB调试
编译gdb,gdbserver
tar xjf gdb-7.4.tar.bz2
cd gdb-7.4/
./configure --target=arm-linux
make
make install //可能需要指定目录prefix
把arm-linux-gdb复制到/bin目录
cd gdb/gdbserver/
./configure --host=arm-linux
make //可能会报错,需解决
cp gdbserver /work/nfs_root/first_fs/bin
编译要调试的应用,编译时加上-g选项
调试:
1. 在ARM板上 (gdbserver是APP的父进程)
gdbserver 192.168.1.17:2345 ./test_debug (开发板ip,端口随意)
2. 在PC上 (gdb需要带有调试信息的在ARM上运行的APP文件)
/bin/arm-linux-gdb ./test_debug (进入gdb调试界面)
输入:target remote 192.168.1.17:2345 (建立连接,注意端口)
然后: 使用gdb命令来控制程序
另一种方法:
让程序在开发板上直接运行,当它发生错误时,令它产生core dump文件
然后使用gdb根据core dump文件找到发生错误的地方
在ARM板上:
1. ulimit -c unlimited (设置为不限制)
2. 执行应用程序 : 程序出错时会在当前目录下生成名为core的文件,拷贝到PC上
在PC上:
3. /bin/arm-linux-gdb ./test_debug ./core (进入gdb调试界面)
可查看到相关错误信息
输入"bt",可查看到调用关系
参考:韦东山Linux教程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通