Android NDK开发-LLDB调试

概述

LLDB是一个高效的C/C++调试器,与LLVM编译器一起使用,提供了丰富的流程控制和数据监测,有效的帮助我们调试程序。

LLDB安装

Android NDK开发-LLDB调试_第1张图片
lldb_install.png

Debug JNI

JNI的调试方式和Java的调试方式差不多,先设置断点,然后点击Debug,进入调试模式。

Android NDK开发-LLDB调试_第2张图片
lldb_breakpoint.png

当程序运行到断点的时候就会停下来,这时在Debug面板可以看到变量的值和指针地址:

Android NDK开发-LLDB调试_第3张图片
lldb_debug_pane.png

使用LLDB

进入到Debug模式后,在VariablesTab的旁边有一个LLDB的Tab,切换到LLDBTab,就可以使用LLDB命令进行调试,LLDB命令有很多强大的功能,比如:打印、寻址、调用堆栈等,通过这些命令可以有效的帮助调试NDK程序。

  • print (p) 打印命令,打印变量及其值:
Android NDK开发-LLDB调试_第4张图片
lldb_cmd_print.png
  • po 仅打印变量的值:
Android NDK开发-LLDB调试_第5张图片
lldb_cmd_po.png
  • expr 可以在调试时动态执行指定表达式,并打印结果,用于在调试过程中修改变量的值:

    执行expr命令前:

Android NDK开发-LLDB调试_第6张图片
lldb_cmd_expr_jni.png

执行expr命令

Android NDK开发-LLDB调试_第7张图片
lldb_cmd_expr.png

执行expr命令后:


Android NDK开发-LLDB调试_第8张图片
lldb_cmd_expr_jni2.png
  • call命令,一般只在不需要显示输出或是方法无返回值时使用:
Android NDK开发-LLDB调试_第9张图片
lldb_cmd_call_jni.png
Android NDK开发-LLDB调试_第10张图片
lldb_cmd_call.png
  • bt命令用来打印堆栈信息,加all可打印所有thread的堆栈:
Android NDK开发-LLDB调试_第11张图片
lldb_cmd_bt_jni.png
Android NDK开发-LLDB调试_第12张图片
lldb_cmd_bt.png
  • image命令用于寻址,可以用来查找栈地址对应的代码位置:

    image lookup --address 0xfxxxxx

    0xfxxxxx:表示对应的栈地址

lldb_cmd_image.png

参考链接

  1. Andorid Studio NDK开发-LLDB调试
  2. The LLDB Debugger
Android NDK开发-LLDB调试_第13张图片
编码前线.jpg

你可能感兴趣的:(Android NDK开发-LLDB调试)