想要知道該down_read所處的位置
crash> bt 1620
pid: 1620 task: ffff88812edb4a00 cpu: 6 command: "mount_clear_soc"
#0 [ffffc900005e3c88] __schedule at ffffffff82248906
#1 [ffffc900005e3d18] schedule at ffffffff82249262
#2 [ffffc900005e3d28] rwsem_down_read_slowpath at ffffffff8224e094
#3 [ffffc900005e3dd0] down_read at ffffffff8224e676 #想要知道該down_read所處的位置
#4 [ffffc900005e3de0] __get_super at ffffffff8145f7a3 #執行dis -l ffffffff8145f7a3
#5 [ffffc900005e3e18] get_super at ffffffff8145f814
#6 [ffffc900005e3e20] __invalidate_device at ffffffff814ca4ec
#7 [ffffc900005e3e40] nbd_ioctl at ffffffff81cd1725
#8 [ffffc900005e3ea8] blkdev_ioctl at ffffffff81a65cbf
#9 [ffffc900005e3ef0] block_ioctl at ffffffff814ca42a
#10 [ffffc900005e3ef8] ksys_ioctl at ffffffff8147dcb0
#11 [ffffc900005e3f30] __x64_sys_ioctl at ffffffff8147dd6e
#12 [ffffc900005e3f38] do_syscall_64 at ffffffff81003f1b
#13 [ffffc900005e3f50] entry_syscall_64_after_hwframe at ffffffff82400078
rip: 00007f568032c577 rsp: 00007ffc7b1d6d58 rflags: 00000202
rax: ffffffffffffffda rbx: 0000000000000000 rcx: 00007f568032c577
rdx: 0000000000000000 rsi: 000000000000ab04 rdi: 0000000000000003
rbp: 0000000000001388 r8: 00007f568080c440 r9: 0000000000000000
r10: 0000000000000003 r11: 0000000000000202 r12: 0000000000000003
r13: 00007ffc7b1d747b r14: 0000000000000653 r15: 0000000000000000
orig_rax: 0000000000000010 cs: 0033 ss: 002b
crash> dis -l ffffffff8145f7a3
/home/sunke/git/linux/fs/super.c: 759
0xffffffff8145f7a3 <__get_super>: addq $0x1,0x4fc9315(%rip) # 0xffffffff86428ac0 <__gcov0.__get_super>
已知super_block的位址為ffff88812ef99800
求成員struct rw_semaphore s_umount的位址,並分析其內容
crash> whatis -o super_block
struct super_block ,
owner = ,
osq =
}, wait_lock = , , }
}},
wait_list =
}
進一步獲取當前擁有該訊號量的程序的pid,需要對owner用結構體進一步task_struct進一步解析,由於在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。所以需要進行轉化。需要將long型的值強制轉換成unsigned long,為18446612687149563904,再轉成十六進製制為ffff88812ec38000
pid = 21769, #當前占有訊號量的程序
tgid = 21769,
stack_canary = 14636143678320973568,
real_parent = 0xffff88812ece0000,
parent = 0xffff88812ece0000,
children = ,
......
crash的實踐總結
大部分crash應該都是有空指標異常導致的 對於大部分的簡單的空指標異常,請相信編譯器。android studio中,對於大部分可能出現異常的情況,都會有相應的警告。請盡量處理編譯器的警告 大部分專案,應該eclipse中開發,可以轉換為android studio專案,或者將 複製到androi...
Android 使用NDK定位Crash
02 27 10 57 15.736 a libc 32000 fatal signal 11 sigsegv at 0x0000000c code 1 thread 32014 thread 1461 02 27 10 57 15.736 a libc 32000 send stop signal...
Android常見Crash原因總結(二)
android平台程式崩潰大家都應該遇到過,force close和anr應該是大家遇到較多的。這裡把android平台程式崩潰的各種型別做乙個簡述和原因列舉。1.anr 可見anr 發生場景 應用發生anr。崩潰症狀 系統彈出視窗詢問使用者選擇 force close 或者 wait force ...