NDK调试之ndk

ndk-stack工具使你能够在stack traces出现在adb logcat的输出中时过滤它们。它也能将一个共享库中的任何地址替换为你的源码中的对应<source-file>:<line-number>值,以使问题能够更精确的描述。

比如,它能够将类似于下面的这些东西:

1I/DEBUG ( 31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 2I/DEBUG ( 31): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' 3I/DEBUG ( 31): pid: 351, tid: 351 %gt;%gt;%gt; /data/local/ndk-tests/crasher <<< 4I/DEBUG ( 31): signal 11 (SIGSEGV), fault addr 0d9f00d8 5I/DEBUG ( 31): r0 0000af88 r1 0000a008 r2 baadf00d r3 0d9f00d8 6I/DEBUG ( 31): r4 00000004 r5 0000a008 r6 0000af88 r7 00013c44 7I/DEBUG ( 31): r8 00000000 r9 00000000 10 00000000 fp 00000000 8I/DEBUG ( 31): ip 0000959c sp be956cc8 lr 00008403 pc 0000841e cpsr 60000030 9I/DEBUG ( 31): #00 pc 0000841e /data/local/ndk-tests/crasher 10I/DEBUG ( 31): #01 pc 000083fe /data/local/ndk-tests/crasher 11I/DEBUG ( 31): #02 pc 000083f6 /data/local/ndk-tests/crasher 12I/DEBUG ( 31): #03 pc 000191ac /system/lib/libc.so 13I/DEBUG ( 31): #04 pc 000083ea /data/local/ndk-tests/crasher 14I/DEBUG ( 31): #05 pc 00008458 /data/local/ndk-tests/crasher 15I/DEBUG ( 31): #06 pc 0000d362 /system/lib/libc.so 16I/DEBUG ( 31):

转换为更加可读的输出:

1********** Crash dump: ********** 2Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' 3pid: 351, tid: 351 >>> /data/local/ndk-tests/crasher <<< 4signal 11 (SIGSEGV), fault addr 0d9f00d8 5Stack frame #00 pc 0000841e /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:13 6Stack frame #01 pc 000083fe /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:5 7Stack frame #02 pc 000083f6 /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:9 8Stack frame #03 pc 000191ac /system/lib/libc.so 9Stack frame #04 pc 000083ea /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:14 10Stack frame #05 pc 00008458 /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:19 11Stack frame #06 pc 0000d362 /system/lib/libc.so

用法

要使用ndk-stack,你首先需要一个包含有你app共享库的symbolic版本的目录。如果你使用NDK build系统 (ndk-build),这些共享库文件位于$PROJECT_PATH/obj/local/<abi>下,将<abi>表示为你的设备的ABI。默认情况下,这个系统使用armeabi ABI。

有两种方法使用这个工具。你可以将logcat 文本作为直接输入喂给这个程序。比如:

adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi

你也可以使用选项 -dump 指定logcat作为输入文件。比如:

1adb logcat > /tmp/foo.txt 2$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump foo.txt

当它开始解析logcat输出是,这个工具查找一个asterisks的初始行。比如:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

注意:当复制/粘贴traces时,不要遗漏这一行,否则将无法正确工作。

原文

Done。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript日期

日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用