您的位置:首页 > 其它

LLDB常用命令

2017-05-17 20:20 155 查看

LLDB常用命令

print (p)打印命令,打印变量以及其值:

p chars (char [10]) $0 = "i am test"

po 仅打印变量的值:

po chars "i am test"

call 就是调用的意思,上述po和p也有调用的功能。一般只在不需要显示输出,或是方法无返回值时使用。例如定义一个变量int p=0,使用
call
命令:

call p++ (int) $0 = 1

expr 可以在调试时动态执行指定表达式,并打印结果,用于在调试过程中修改变量的值

比如我们在程序里面定义int b=1;可以在断点的时候使用
expr
更改其值。

expr b=10

(int) $0 = 10


bt 命令用来堆栈信息,加all可打印所有thread的堆栈,比如我们增加一段导致崩溃的代码

JNIEXPORT jstring JNICALL
Java_com_jjz_NativeUtil_firstNative(JNIEnv *env, jclass type) {
char chars[] = "i am test";
int p=0;
p=1/0;
return (*env)->NewStringUTF(env, chars);
}

运行的时候出现了崩溃,这个时候运行
bt
命令,得到堆栈信息:

*thread #1, name = 'com.jjz', stop reason = signal SIGFPE
* frame #0: 0xf6ff35e8 libc.so`tgkill + 12
frame #1: 0xf6ff11ec libc.so`pthread_kill + 36
frame #2: 0xf6fcd846 libc.so`raise + 14
frame #3: libexperiment.so`__aeabi_idiv0 at lib1funcs.S:1337
frame #4: libexperiment.so`Java_com_jjz_NativeUtil_firstNative(env=0xf4218ea0, type=0xff8b732c) at experiment.c:16
frame #5: base.odex`java.lang.String com.jjz.NativeUtil.firstNative() at NativeUtil.java:0
frame #6: base.odex`void com.jjz.MainActivity.onCreate(android.os.Bundle) at MainActivity.java:15
frame #7: 0x729d58bf


image用于寻址,可以用来查找栈地址对应的代码位置,image命令有很多的参数,可以帮助我们更加清晰的定位问题,其中比较常用的是
image lookup
:

>image lookup --address 0xfxxxxx

0xfxxxxx
表示对应的栈地址,有了地址可以通过
image lookup
命令来查看该栈地址上面对应的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: