概述: 调试基础知识
一、addr2line的使用
file lib.so 查看是否被strip过
addr2line -e lib.so 0x12323
二、gdb的使用
1、gdb 可执行程序 core.1234
!clear清除之前的显示
2、进程卡死的处理方式
gdb -p [pid] pid是没有退出的进程ID
然后generate-core-file [/path/to/sava/the/core] 生成core文件,
拿回来分析 set solib-search-path 共享库路径
set debug-file-directory
三、gdb info查询信息
1、常用
info registers 当前寄存器的值
info args 查看当前函数参数的值
info locals 查看当前局部变量的值
info frame 查看当前栈帧的详细信息
info variables 查看程序中变量符号
info functions 查看程序中函数符号
info inferiors (查看当前进程数量)
inferios 1切换到哪个进程
2、info thread
info threads(查看当前线程数量)
thread n(切换到哪个线程)
info locals
info registers
print $rbp
四、gdb堆栈查看
thread apply all bt
info proc mappings 显示进程地址空间布局,包括代码段、数据段、堆、栈等
info proc map 同上
info sharedlibrary
调试java 启动的Jar,但是jar通过Jni调用了C++/C生成的test.so 然后生成了core文件
gdb $JAVA_HOME/bin java core.test set solib-searh-path ‘test-so_path’
五、在linux下配置core文件的生成
-
执行 sudo vi /etc/profile
-
浏览的文件末尾,添加 ulimit -c unlimited,保存退出
-
执行 source /etc/profile
-
执行 ulimit -a,查看 core file size 那一栏的值是否为 unlimited