GDB调试

使用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

你可能感兴趣的:(GDB调试)