日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Native進(jìn)程之Trace原理

一. 概述

當(dāng)發(fā)生ANR(Application Not Response),對于Java進(jìn)程可通過kill -3向目標(biāo)進(jìn)程發(fā)送信號(hào)SIGNAL_QUIT, 輸出相應(yīng)的traces信息保存到目錄/data/anr/traces.txt;而對于Native進(jìn)程可通過 debuggerd輸出traces信息。

可通過一條命令來獲取指定Native進(jìn)程的traces信息,例如輸出pid=17529進(jìn)程信息:

執(zhí)行完該命令后直接輸出traces信息到屏幕,如下:

接下來說說debuggerd是如何輸出Native進(jìn)程的trace。

二. Debuggerd

文章debuggerd守護(hù)進(jìn)程詳細(xì)介紹了Debuggerd的工作原理,此處當(dāng)執(zhí)行debuggerd -b命令后:

  1. Client進(jìn)程調(diào)用send_request()方法向debuggerd服務(wù)端發(fā)出DEBUGGER_ACTION_DUMP_BACKTRACE命令;
  2. Debugggerd進(jìn)程收到該命令,fork子進(jìn)程中再執(zhí)行worker_process()過程;
  3. 子進(jìn)程通過perform_dump()方法來根據(jù)命令DEBUGGER_ACTION_DUMP_BACKTRACE,會(huì)調(diào)用到dump_backtrace()方法輸出backtrace.

接下來,從dump_backtrace()方法講起:

2.1 dump_backtrace

[-> debuggerd/backtrace.cpp]

2.2 dump_process_header

[-> debuggerd/backtrace.cpp]

例如:

2.3 dump_thread

[-> debuggerd/backtrace.cpp]

2.4 dump_backtrace_to_log

[-> debuggerd/Backtrace.cpp]

通過循環(huán)遍歷輸出整個(gè)backtrace中的每一棧幀F(xiàn)ormatFrameData的信息.

2.5 FormatFrameData

[-> debuggerd/Backtrace.cpp]

例如:(這些map信息是由/proc/%d/maps解析出來的)

 
 
  1. #01 pc 000000000001cca4 /system/lib64/libc.so (epoll_pwait+32) 

2.6 dump_process_footer

[-> debuggerd/backtrace.cpp]

 
 
  1. static void dump_process_footer(log_t* log, pid_t pid) { 
  2.   _LOG(log, logtype::BACKTRACE, "\n----- end %d -----\n", pid); 

例如:----- end 1789 -----

三. 總結(jié)

通過debuggerd -b [pid],可輸出Native進(jìn)程的調(diào)用棧,這些信息是通過解析/proc/[pid]/maps而來的。

【本文是專欄“小米開放平臺(tái)”原創(chuàng)文章,“小米開放平臺(tái)”微信公眾號(hào)xiaomideveloper】


當(dāng)前文章:Native進(jìn)程之Trace原理
文章分享:http://www.dlmjj.cn/article/cdjsdeh.html