GDB 作为开源调试的基本工具的使用,几乎是每个linux程序猿必须掌握的
1 Code Dump的原因
2 Code Dump的基本调试
2.1 printf 的办法
在不同进程直接,不同符号表的跨越,往往printf的方式是最原始也是最有效的,要求就是程序猿本身对系统比较熟悉,知道下一步要发生的事情。
2.2
3 GDB code Dump的调试
3.1 Code dump 文件的生成,基本会自动生成
3.2 Code dump 文件阅读
3.2.1 拿到PC的地址
code dump 文件打印会有以下部分,
[ 439.001907] LR is at 0xb39faebf
[ 439.001914] <strong>pc : [<b39ec5b6>]</strong> lr : [<b39faebf>] psr: 28060170
这里会告诉你,code dump发生的时候pc指针的地方
[ 439.000269] --------------------------------------------------------------------------------------
[ 439.000279] PC:b39ec5b6, LR:b39faebf
3.2.2 在dump map on comm 里面找到对应的大致的code dump的so
[ 439.001953] -----------------------------------------------------------
[ 439.001958] * dump maps on comm(1889 - Media)
本例里面,PC = b39ec5b6 , 那个根据dump map on comm 的memory make ,
[ 439.008453] b39d6000-b3ab0000 r-xp 00000000 b3:08 904 /lib/libc-2.19-2014.08.so
3.2.3 一下系统会自动生成打包的code dump文件用于GDB 调试
例如:core_1850_20160616144521.gz
gzip -d core_1850_20160616144521.gz
3.2.4 找到你的tool chain 的gdb 地址,一般在 toolchain/arm/bin/arm-linux-gnueabihf-gdb
3.2.5 运行GDB 调用各个包含code dump的so文件
./arm-linux-gnueabihf-gdb + 【调试的SO文件】 + 【code dump 文件】
3.2.6 执行再设定标号的包含so的各个lib的路径,用:号分割开来。
set solib-search-path ~/out/Release/lib:~/temp/Nova_06_15/:~/temp/Nova_common_lib/