0

我有使用 Android NDK 工具链编译的本机源代码。此共享库由运行在 android 设备上的 mediaserver 进程加载。通常当任何用户空间进程崩溃时,android 中的调试器守护进程会获取崩溃进程的堆栈跟踪并将其打印在 logcat 消息中。但有时,我看到 mediaserver 进程崩溃,logcat 日志中没有堆栈跟踪,但内核日志打印出堆栈跟踪,表明 mediaserver 进程中存在页面错误。它打印出 PC、LR 和其他寄存器。那么如何解码这些信息以定位错误代码中的地址呢?

这是一个示例跟踪:

<7>[  198.755417] mediaserver: unhandled page fault (11) at 0x7b969000, code 0x817
<1>[  198.755424] pgd = e005c000
<1>[  198.757092] [7b969000] *pgd=25865831, *pte=00000000, *ppte=00000000
<4>[  198.764864] Pid: 1957, comm:          mediaserver
<4>[  198.769647] CPU: 2    Tainted: G        W     (3.4.0-gf77558a-00009-gb024756 #2)
<4>[  198.777010] PC is at 0x40082728
<4>[  198.780007] LR is at 0x408
<4>[  198.782702] pc : [<40082728>]    lr : [<00000408>]    psr: 20000010
<4>[  198.782703] sp : 75393dd0  ip : 00001ba0  fp : 00000002
<4>[  198.794310] r10: 483463c0  r9 : 00000000  r8 : 00001200
<4>[  198.799373] r7 : 6afdf950  r6 : 6aff0db8  r5 : 412ef814  r4 : 7b68c008
<4>[  198.806293] r3 : ff1b1517  r2 : 0034bc00  r1 : 48346000  r0 : 7b968fe8
<4>[  198.812546] Flags: nzCv  IRQs on  FIQs on  Mode USER_32  ISA ARM  Segment user
<4>[  198.819848] Control: 10c5787d  Table: 2805c06a  DAC: 00000015
<4>[  198.825432] 
<4>[  198.825433] R3: 0xff1b1497:
<4>[  198.829572] 1494  ******** ******** ******** ******** ******** ******** ******** ********
<4>[  198.837734] 14b4  ******** ******** ******** ******** ******** ******** ******** ********
<4>[  198.845893] 14d4  ******** ******** ******** ******** ******** ******** ******** ********
<4>[  198.854070] 14f4  ******** ******** ******** ******** ******** ******** ******** ********
<4>[  198.862211] 1514  ******** ******** ******** ******** ******** ******** ******** ********
<4>[  198.870371] 1534  ******** ******** ******** ******** ******** ******** ******** ********
<4>[  198.878532] 1554  ******** ******** ******** ******** ******** ******** ******** ********
<4>[  198.886693] 1574  ******** ******** ******** ******** ******** ******** ******** ********
<4>[  198.894851] 1594  ******** ******** ******** ******** ******** ******** ******** ********
<4>[  198.903028] [<c0013da4>] (unwind_backtrace+0x0/0x11c) from [<c0019980>] (__do_user_fault+0x110/0x15c)
<4>[  198.912347] [<c0019980>] (__do_user_fault+0x110/0x15c) from [<c0786384>] (do_page_fault+0x380/0x3d0)
<4>[  198.921358] [<c0786384>] (do_page_fault+0x380/0x3d0) from [<c0008514>] (do_DataAbort+0x134/0x1a8)
<4>[  198.930251] [<c0008514>] (do_DataAbort+0x134/0x1a8) from [<c0784bb4>] (__dabt_usr+0x34/0x40)
<4>[  198.938631] Exception stack(0xddd8bfb0 to 0xddd8bff8)
<4>[  198.943658] bfa0:                                     7b968fe8 48346000 0034bc00 
ff1b1517
<4>[  198.951801] bfc0: 7b68c008 412ef814 6aff0db8 6afdf950 00001200 00000000 483463c0 00000002
<4>[  198.960035] bfe0: 00001ba0 75393dd0 00000408 40082728 20000010 ffffffff
4

0 回答 0