根据show_bt_by_pid:pid   分离maps 和 backtrace

文件格式

show_bt_by_pid: 1: init.
Dump native maps files:
55873af000-55874f2000 r-xp 000b2000 /system/bin/init
7f23b3b000-7f23b74000 r-xp 00020000 /system_ext/lib64/libcota.so
7f23bab000-7f23bd9000 r-xp 00015000 /system_ext/lib64/libopex.so
7f2404f000-7f24059000 r-xp 00008000 /system/lib64/libziparchive.so
7f251aa000-7f251b5000 r-xp 00007000 /system_ext/lib64/liboplusextproperty.so

<ffffff94c2a881f0> __switch_to+0x144/0x170
<ffffff94c3d3380c> __schedule+0x89c/0x9d0
<ffffff94c3d339b4> schedule+0x74/0x98
<ffffff94c2b7b168> futex_wait_queue_me+0xd8/0x134
<ffffff94c2b783a0> futex_wait+0x120/0x2d4
<ffffff94c2b76a98> do_futex+0x124/0x190c
<ffffff94c2b7a1f8> __arm64_sys_futex+0x150/0x1d4
<ffffff94c2aa4758> invoke_syscall+0x64/0x138
<ffffff94c2a98ea0> el0_svc_common+0x84/0x12c
<ffffff94c2a98e00> el0_svc_handler+0x64/0x80
<ffffff94c2a83d08> el0_svc+0x8/0xc
<ffffffffffffffff> 0xffffffffffffffff
ExSys-Statistic sysTid=9149, pid=1671
#0 pc 757be76220
#1 pc 74e8878a70
#2 pc 74e88780b8
#3 pc 70eb2f50

#!/system/bin/sh

kernel_raw_file=SYS_HANG_DETECT_RAW1
kernel_raw_file="$1"

string_dump="show_bt_by_pid:"
cnt=0
pid=0
while read line_raw
do
number=$(echo "$line_raw" | grep "$string_dump" | awk  -F ":" '{print $1}')

if [ -n "$number" ];then
echo "$line_raw"
cnt=$((cnt + 1))
pid=$(echo "$line_raw" | awk  -F ":" '{print $2}')
pid=$(echo "$pid" | awk '$1=$1')

fi

file=$kernel_raw_file"_"$pid
#if [ ! -e $file ];then
find_raw_line=`echo "$line_raw" | grep -E "r-xp|r-xs|--xp"`
if [ -n "$find_raw_line" ];then
map_address=`echo "$find_raw_line" | awk '{print $1}'`

begin_address=`echo "$map_address" | awk -F '-' '{print $1}'`
end_address=`echo "$map_address" | awk -F '-' '{print $2}'`

#echo $pc"--->"$begin_address"----"$end_address
echo "$line_raw" >>$kernel_raw_file"_"$pid

else

echo "$line_raw" >>$kernel_raw_file"_"$pid"_dump"

fi #if [ -n "$find_raw_line" ]

#fi #if [ ! -e $file ]

done < "$kernel_raw_file"

根据maps 和 对应 backtrace 自动解析

#!/system/bin/sh

my_llvm_addr2line="prebuilts/clang/host/linux-x86/clang-r416183b/bin/llvm-addr2line"
echo "$my_llvm_addr2line"
my_llvm_readelf="prebuilts/clang/host/linux-x86/clang-r416183b/bin/llvm-readelf"

vmlinux="ss_dump_0707/vmlinux"

so_lib_pre="out/target/product/mssi_64_cn_armv82/symbols"

kernel_dump_file=SYS_HANG_DETECT_RAW1_894_dump
kernel_lib_file=SYS_HANG_DETECT_RAW1_894
result_file=SYS_HANG_DETECT_RAW1_result.txt

kernel_lib_file="$1"
if [ ! -n "$2" ];then
kernel_dump_file="$kernel_lib_file""_dump"
else
kernel_dump_file="$2"
fi
result_file="$kernel_dump_file""_result"

##get kvOffset from SYS_KERNEL_LOG
##<5>[289072.063672]-(1)[263:hang_detect]Kernel Offset: 0x121fe00000 from 0xffffff8008000000

kernel_log_file=SYS_KERNEL_LOG
find_line=`grep -rsn "Kernel Offset:" $kernel_log_file`

kvOffset=0
echo "$find_line"
if [ -n "$find_line" ];then
kvOffset=`echo "$find_line" | awk '{print $3}' `
echo "$kvOffset"
fi

echo >"$result_file"

#<ffffff9227e881f0>  vmlinux

while read line
do
stack=$(echo "$line" | grep '^<[A-Za-z0-9_]' | awk '{print $1}')

echo "$line" >>"$result_file"
if [ -n "$stack" ];then

pc_addr=$(echo "$stack" | sed 's/<//g' | sed 's/>//g')

#vmlinux
pc_addr_over=$(echo $pc_addr | sed 's/^ffff//' | sed 's/^FFFF//')
flag=false
echo $pc_addr--$kvOffset

if [ "$pc_addr_over" != "$pc_addr" ];then
   flag=true
fi

pc_addr_over=`echo "obase=16; $((16#$pc_addr_over-kvOffset))" | bc`

if [ "$flag" == "true" ];then
link_addr="0xFFFF"$pc_addr_over
fi

"$my_llvm_addr2line" -C   -e  $vmlinux    $link_addr  >>"$result_file"

fi #if [ -n "$stack" ]

stack=`echo "$line" | grep -n "#.* pc"`

if [ -n "$stack" ];then
pc_addr=$(echo "$line" | awk '{print $3}')
echo "so lib""$stack"
echo "$pc_addr"
#so

pc_addr=$(echo "$pc_addr" | awk '$1=$1')

while read lib_line
do
find_lib=`echo "$lib_line" | grep  -E "r-xp"`
if [ -n "$find_lib" ];then
map_address=`echo "$find_lib" | awk '{print $1}'`
begin_address=`echo "$map_address" | awk -F '-' '{print $1}'`
end_address=`echo "$map_address" | awk -F '-' '{print $2}'`

lib_info=`echo "$find_lib" | awk '{print $4}'`

if [ $((16#$begin_address)) -le $((16#$pc_addr)) ] && [ $((16#$pc_addr)) -le $((16#$end_address)) ]
then
    
    #addr_link = pc - start_lib  + offset 
    offset=`"$my_llvm_readelf" -l -W "$so_lib_pre""$lib_info" |  grep  " R E " | awk '{print $2}'`
    #offset=$(echo $offset | sed 's/^0x//')
    #echo $pc_addr"--->"$begin_address---$end_address----$lib_info---offset$offset
    link_addr=`echo "obase=16; $((16#$pc_addr-16#$begin_address+offset))" | bc`
    echo "$my_llvm_addr2line"  -C -f  -e  "$so_lib_pre""$lib_info"    "0x"$link_addr
    "$my_llvm_addr2line"  -C -f  -e  "$so_lib_pre""$lib_info"    "0x"$link_addr >>"$result_file"
    break
fi

fi #if [ -n "$find_raw_line" ]
done < "$kernel_lib_file"
fi #if [ -n "$stack" ]

done < "$kernel_dump_file"

NE 和 KE 堆栈脚本解析相关推荐

  1. ns-3网络仿真(简易脚本解析)

    ns-3简易脚本解析 点对点有线网络(first.cc) 头文件 命名空间 NS_LOG_COMPONENT_DEFINE main()函数中的准备工作 创建网络拓扑 点对点有线网络(first.cc ...

  2. SteamVR脚本解析

    SteamVR各脚本的功能 SteamVR/Scripts/下脚本各功能的实现 Paste_Image.png 1.SteamVR.cs 单例管理类,管理SteamVR程序的运行和终止. 2.Stea ...

  3. 脚本解析photoshop文本属性

    尊重原创,转载请在文首注明出处:http://blog.csdn.net/cai612781/article/details/78072531 在做unity项目中,用到了psd2ngui插件来把ps ...

  4. ps脚本解析psd文本字号

    ps脚本解析psd中文本字号最简单的方法,通过DOM获取:var size = activeDocument.activeLayer.textItem.size; 但是当该文本被拉伸过后,DOM解析出 ...

  5. steamvr自定义按键_SteamVR脚本解析

    SteamVR各脚本的功能 SteamVR/Scripts/下脚本各功能的实现 Paste_Image.png 1.SteamVR.cs 单例管理类,管理SteamVR程序的运行和终止. 2.Stea ...

  6. [转载]SteamVR脚本解析

    Paste_Image.png 1.SteamVR.cs 单例管理类,管理SteamVR程序的运行和终止. 2.SteamVR_Camera.cs 给场景添加一个最基本可运行的SteamVR组. 3. ...

  7. LD链接脚本解析-STM32F4xx

    本篇文章主要围绕项目 STM32_RTOS_GUN 的链接脚本 STM32F417IG_FLASH.ld 进行分析,同时对编写链接脚本的方法进行相应的讲解,尽可能地做到通过阅读这篇文章后能够学会编写简 ...

  8. android lichee编译脚本解析

    #编译流程 #lichee 目录下 ./build.sh -p sun7i_android -k 3.4 1 2 3 #build.sh 解析#!/bin/bash set -e #"Exi ...

  9. S3C2440 lds链接脚本解析

    1.  SECTIONS到底意味着什么 在一个裸版程序里面含有*.lds文件,而lds文件意味着如果你的程序烧录在nandflash,那在nandflash的内存将根据lds文件指定偏移来分布,下面从 ...

最新文章

  1. SSH基本简介及连接交互过程
  2. 确定第十五届安徽赛区国赛奖项数量
  3. 未设置服务器核心文件,[问题3] dhcpd.conf是DHCP服务器的配置的核心,每次启动DH..._考试资料网...
  4. 零基础基于U-Net网络实战眼底图像血管提取
  5. 解决MAC系统升级导致COCOAPODS失效问题
  6. apriori算法c++_关联分析——基于Apriori算法实现
  7. 生产问题分析!delete in子查询不走索引?!
  8. 【小项目】Axios 实现前后端交互
  9. 合成简单的声音波形(一)
  10. linux无密码scp,linux通过ssh-keygen实现无密码scp文件和目录
  11. 级联MobileNet-V2实现CelebA人脸关键点检测(附训练源码)
  12. ArcCatalog添加数据库连接
  13. 表格列宽怎么设置?(excel表格)
  14. CentOS 7 时区设置
  15. 软件测试面包屑什么意思,面包屑的用法面包屑有什么作用
  16. Laravel artisan常用命令集锦
  17. uniapp中使用拷贝,复制粘贴功能,uniapp,隐藏软键盘
  18. c 和易语言如何传字节集,易语言文本型和字节集型数据相互转换的工具
  19. Android 跑马灯的方法
  20. RRDTool中文手册

热门文章

  1. UC/OS和UCLinux比较
  2. 联想用u盘重装系统步骤_详解联想如何使用u盘重装win10系统
  3. 一些常用的网站或工具(二)
  4. 计算机中f4的应用,电脑键盘中功能区的F2键F4键如何使用 电脑键盘中功能区的F2键F4键怎么使用...
  5. vscode 使用手册(keil)
  6. 牛顿迭代法计算平方根
  7. 【CTF资料-0x0002】PWN简易Linux堆利用入门教程by arttnba3
  8. [书蕴笔记-2]使用word2vec模型迭代获取标签
  9. Android SystemUI之NavigationBar,导航栏(四)
  10. 网页底部版权信息如何注明?