crash使用總結

2021-10-02 22:05:46 字數 2782 閱讀 8046

想要知道該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 ...