0

我有一个使用 JNI 中的共享对象(我自己编写的)的 android 应用程序,它导致了 segault。但是,我在调试它时遇到了困难,因为每次它崩溃时,我的 /dev/log/main 都会充斥着如下所示的消息:

06-18 12:50:31.069  2863  2863 I DEBUG   :     453b7608  ffffffff  
06-18 12:50:31.069  2863  2863 I DEBUG   :     453b760c  ffffffff  
06-18 12:50:31.069  2863  2863 I DEBUG   :     453b7610  ffffffff  
06-18 12:50:31.069  2863  2863 I DEBUG   :     453b7614  ffffffff  
06-18 12:50:31.069  2863  2863 I DEBUG   :     453b7618  ffffffff  
06-18 12:50:31.069  2863  2863 I DEBUG   :     453b761c  ffffffff  
06-18 12:50:31.069  2863  2863 I DEBUG   :     453b7620  ffffffff  
06-18 12:50:31.069  2863  2863 I DEBUG   :     453b7624  ffffffff  
06-18 12:50:31.069  2863  2863 I DEBUG   :     453b7628  ffffffff

有没有办法抑制我手机上似乎每个内存地址的输出,以便我可以在堆栈跟踪中找到相关信息?

(更像这样):

06-18 13:07:35.857 11350 11350 I DEBUG   : signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 452c7000
06-18 13:07:35.857 11350 11350 I DEBUG   :  r0 00000021  r1 452c66a0  r2 00000033  r3 0000003c
06-18 13:07:35.857 11350 11350 I DEBUG   :  r4 000000a1  r5 452c7000  r6 002cf880  r7 453c6b08
06-18 13:07:35.857 11350 11350 I DEBUG   :  r8 4051e618  r9 00020000  10 51eb851f  fp 81f03700
06-18 13:07:35.857 11350 11350 I DEBUG   :  ip 00000064  sp 452c6af8  lr 81f00e35  pc 81f00df8  cpsr 00000030
06-18 13:07:35.857 11350 11350 I DEBUG   :  d0  0000000000000000  d1  0000002f00000000
06-18 13:07:35.857 11350 11350 I DEBUG   :  d2  4da4480e423d3abc  d3  006f1fe04a5247c0
06-18 13:07:35.857 11350 11350 I DEBUG   :  d4  00000000003491f0  d5  0000000000000000
06-18 13:07:35.857 11350 11350 I DEBUG   :  d6  3f80000000000000  d7  43200000000000a0
06-18 13:07:35.857 11350 11350 I DEBUG   :  d8  0000000000000000  d9  0000000000000000
06-18 13:07:35.857 11350 11350 I DEBUG   :  d10 0000000000000000  d11 0000000000000000
06-18 13:07:35.857 11350 11350 I DEBUG   :  d12 0000000000000000  d13 0000000000000000
06-18 13:07:35.857 11350 11350 I DEBUG   :  d14 0000000000000000  d15 0000000000000000
06-18 13:07:35.857 11350 11350 I DEBUG   :  scr 60000012
06-18 13:07:35.857 11350 11350 I DEBUG   : 
06-18 13:07:35.887 11350 11350 I DEBUG   : tid 11348 not responding!

我主要在 Eclipse 中使用 DDMS 透视图,但不得不使用adb shell从主日志中捕获直接转储,因为 Eclipse 中的窗口很快就会变得不堪重负。这是一个不可接受的工作流程。

4

2 回答 2

0

尝试在崩溃实际发生之前打开控制台,然后运行

adb logcat -s DEBUG | grep -v ffffffff > debug.log

您可以将 logcat 重定向到主机上的文件,并且可能您会找到一种方法在崩溃后查看这个巨大的文件。

于 2012-06-20T15:06:47.053 回答
0

将 logcat 通过管道传输到开发机器上的文件中

adb logcat > logfile

或者,如果你有 tee,就这样做,这样你也可以看到它飞过

adb logcat | tee logfile

然后在您喜欢的文本编辑器中打开文件并搜索感兴趣的项目

您还可以使用各种 grep 过滤器和管道进入分页器,例如 less 或 more,但存储到文件并在可以移动的编辑器中检查对于需要认真研究的问题更好。

于 2012-06-20T15:11:04.973 回答