使用GDB调试
配置环境参数:
$ cd /local/software/goflip/
$ export PATH=/sbin:$PATH
$ source build/envsetup.sh
$ export PRODUCT_DEFAULT_SYMLINK_FILE=true
$ choosecombo//后面的参数看具体的项目
Attach进程:
$ adb devices //如果获取不到手机,则跑adb
kill-server,adb start-server,否则直接跑下面的命令。
$ cd device/qcom/b2g_common/
$ adb shell b2g-ps
//查看手机正在运行的进程PID,选择debug的目标
$ source ./run-ddd.sh attach 2761
Debug
1.在最下面输入框中输入(不能粘贴):b 文件名:行数
,然后按enter键。注:只能给C或者C++文件打断点
eg:b Camera.cpp:234
2.在同样的地方输入:c,然后回车。
3.操纵手机,等待运行到断点处,可在菜单栏选择查看栈。
GDB常用方法
(1)常用的命令,以拍照为例
拍照函数在frameworks/av/camera/Camera.cpp->takePicture
(gdb) b Camera.cpp:234 ->打断点在takePicture函数
(gdb) c ->continue
(gdb) n -> next,逐行调试
(gdb) p -> print,打印变量
(gdb) bt->backtrace, 打印栈帧指针
(gdb) up/down , 跳到上层或者下层函数
(gdb) quit,退出 GDB
(2)Debug B2G进程,抓取死机stack
直接在device/qcom/b2g_common下面执行 source run-ddd.sh
会重新启动b2g进行调试 ,
复现b2g crash。
输入bt既能恢复死机栈.
(3)抓Log,在不改代码的情况下,teace变量的值, 如Camera的例子里面
b Camera.cpp:234 ->在这里打上断点
commands 1 ->commands 1这个断点上
>printf "msgType is %d \n", msgType
>continue
>end
然后在执行,就会打印出log
(4)设置值进行调试
在断点的地方直接调用print+变量名设置
如b Camera.cpp:234
拍照,执行断点函数
p msgType查看为238
print msgType = 1
在p msgType查看,msgType改为1
网友评论