Android P 開啟抓取Coredump功能

默認情況下,Android的core dump size是被設(shè)置為0的冈钦,所以在進程crash時不會生成coredump李请。為了抓取coredump瞧筛,需要開啟該功能导盅。下面介紹開啟方法。

1.修改Zygote子進程的core dump size

打開art/runtime/native/dalvik_system_ZygoteHooks.cc绅络,加入以下代碼:

diff --git a/runtime/native/dalvik_system_ZygoteHooks.cc b/runtime/native/dalvik_system_ZygoteHooks.cc
index 891cdfa..caea8c0 100644
--- a/[runtime/native/dalvik_system_ZygoteHooks.cc]
+++ b/[runtime/native/dalvik_system_ZygoteHooks.cc]
@@ -46,7 +46,9 @@
#if defined(__linux__)
#include <sys/prctl.h>
#endif
-
+#ifdef __ANDROID__
+#include <cutils/properties.h>
+#endif
#include <sys/resource.h>
namespace art {
@@ -78,7 +80,18 @@ static void EnableDebugger() {
#endif
  // We don't want core dumps, though, so set the core dump size to 0.
  rlimit rl;
+#ifdef __ANDROID__
+  char prop_value[PROPERTY_VALUE_MAX];
+  property_get("persist.debug.trace", prop_value, "0");
+  if (prop_value[0] == '1') {
+      LOG(INFO) << "setting RLIM to infinity for process " << getpid();
+      rl.rlim_cur = RLIM_INFINITY;
+  } else {
+      rl.rlim_cur = 0;
+  }
+#else
  rl.rlim_cur = 0;
+#endif
  rl.rlim_max = RLIM_INFINITY;
  if (setrlimit(RLIMIT_CORE, &rl) == -1) {
    PLOG(ERROR) << "setrlimit(RLIMIT_CORE) failed for pid " << getpid();

當系統(tǒng)屬性persist.debug.trace的值為1時恩急,將rlim_cur設(shè)置為RLIM_INFINITY纪蜒。

2.修改Native進程的core dump size

打開system/core/init/property_service.cpp,添加隨系統(tǒng)屬性“persist.debug.trace”的處理纯续,當檢測到persist.debug.trace被置為1時,通過setrlimit設(shè)置rlim_cur和rlim_max為RLIM_INFINITY窗看,即不對資源限制。

diff --git a/init/property_service.cpp b/init/property_service.cpp
index 4172ba7..cdc5998 100644
--- a/[init/property_service.cpp]
+++ b/[init/property_service.cpp]
@@ -698,6 +698,20 @@ static void load_override_properties() {
    }
}
+static int check_rlim_action() {
+    struct rlimit rl;
+    std::string value  = android::base::GetProperty("persist.debug.trace", "");
+
+    if(value == "1") {
+        rl.rlim_cur = RLIM_INFINITY;
+        rl.rlim_max = RLIM_INFINITY;
+        if (setrlimit(RLIMIT_CORE, &rl) < 0) {
+            PLOG(ERROR) << "could not enable core file generation";
+        }
+    }
+    return 0;
+}
+
/* When booting an encrypted system, /data is not mounted when the
  * property service is started, so any properties stored there are
  * not loaded.  Vold triggers init to load these properties once it
@@ -723,6 +737,8 @@ void load_persist_props(void) {
    }
    persistent_properties_loaded = true;
    property_set("ro.persistent_properties.ready", "true");
+    /*check for coredump*/
+    check_rlim_action();
}
void load_recovery_id_prop() {

3.設(shè)置coredump文件名稱格式及保存路徑

在system/core/rootdir/init.rc文件中加入,當檢測到系統(tǒng)屬性persist.debug.trace的值為1時逢唤,創(chuàng)建目錄“/data/core”,并在/proc/sys/kernel/core_pattern中寫入coredump的文件名稱格式為“%E.%p.%e”即“路徑.pid.可執(zhí)行程序名”

diff --git a/rootdir/init.rc b/rootdir/init.rc
index f95d58e..7d0fdfb 100644
--- a/[rootdir/init.rc]
+++ b/[rootdir/init.rc]
@@ -700,6 +700,11 @@ on property:vold.decrypt=trigger_load_persist_props
    start logd
    start logd-reinit
+# corefile limit
+on property:persist.debug.trace=1
+  mkdir /data/core 0777 root root
+  write /proc/sys/kernel/core_pattern "/data/core/%E.%p.%e"
+
on property:vold.decrypt=trigger_post_fs_data
    trigger post-fs-data
    trigger zygote-start

4.應(yīng)用

在adb shell中通過“setprop persist.debug.trace 1”將persist.debug.trace的值設(shè)置為1魔慷,然后重啟著恩,即可以開啟抓取coredump;在adb shell中通過“setprop persist.debug.trace 0”將persist.debug.trace的值置為0邀摆,關(guān)閉抓取coredump功能。生成的coredump文件將會保存在“/data/core/”目錄下隧熙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幻林,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子躏敢,更是在濱河造成了極大的恐慌整葡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啼器,死亡現(xiàn)場離奇詭異,居然都是意外死亡端壳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門岖免,熙熙樓的掌柜王于貴愁眉苦臉地迎上來照捡,“玉大人,你說我怎么就攤上這事栗精。” “怎么了术羔?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵级历,是天一觀的道長。 經(jīng)常有香客問我寥殖,道長,這世上最難降的妖魔是什么熏纯? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任粤策,我火速辦了婚禮,結(jié)果婚禮上叮盘,老公的妹妹穿的比我還像新娘。我一直安慰自己毒费,他們只是感情好愈魏,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布想际。 她就那樣靜靜地躺著溪厘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桩匪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音彩扔,去河邊找鬼。 笑死贾惦,一個胖子當著我的面吹牛敦捧,可吹牛的內(nèi)容都是我干的须板。 我是一名探鬼主播兢卵,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼秽荤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窃款?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤烟阐,失蹤者是張志新(化名)和其女友劉穎紊扬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體珠月,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年驻谆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勺卢。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡象对,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勒魔,到底是詐尸還是另有隱情,我是刑警寧澤冠绢,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布弟胀,位于F島的核電站,受9級特大地震影響孵户,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夏哭,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一方庭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧械念,春花似錦、人聲如沸龄减。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亚隙,卻和暖如春违崇,著一層夾襖步出監(jiān)牢的瞬間阿弃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工脾还, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留入愧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓怔蚌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親媚创。 傳聞我的和親對象是個殘疾皇子彤恶,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348