Stability - Coredump - enable

Stability - Coredump - enable

1. Enable such feature from source code

Apply this patch, then we can turn on it by 'persist.debug.trace'.

diff --git a/runtime/native/dalvik_system_ZygoteHooks.cc b/runtime/native/dalvik_system_ZygoteHooks.cc
index 9da44a4..2b3d10c 100644
--- a/runtime/native/dalvik_system_ZygoteHooks.cc
+++ b/runtime/native/dalvik_system_ZygoteHooks.cc
@@ -34,7 +34,9 @@
 #if defined(__linux__)
 #include <sys/prctl.h>
 #endif
-
+#ifdef __ANDROID__
+#include <cutils/properties.h>
+#endif
 #include <sys/resource.h>
 
 namespace art {
@@ -59,7 +61,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();

another:

diff --git a/init/property_service.cpp b/init/property_service.cpp
index 5c1ae79..991f8bc 100644
--- a/init/property_service.cpp
+++ b/init/property_service.cpp
@@ -41,6 +41,7 @@
 #include <sys/types.h>
 #include <netinet/in.h>
 #include <sys/mman.h>
+#include <sys/resource.h>
 #include <private/android_filesystem_config.h>
 
 #include <selinux/selinux.h>
@@ -468,6 +469,22 @@ static void load_override_properties() {
     }
 }
 
+static int check_rlim_action() {
+    std::string value ;
+    struct rlimit rl;
+    value = property_get("persist.debug.trace");
+    const char* pval = value.c_str();
+
+    if((strcmp(pval,"1") == 0)) {
+        rl.rlim_cur = RLIM_INFINITY;
+        rl.rlim_max = RLIM_INFINITY;
+        if (setrlimit(RLIMIT_CORE, &rl) < 0) {
+            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
@@ -477,6 +494,8 @@ void load_persist_props(void) {
     load_override_properties();
     /* Read persistent properties after all default values have been loaded. */
     load_persistent_properties();
+    /*check for coredump*/
+    check_rlim_action();
 }
 
 void load_recovery_id_prop() {

 

2. Turn on such feature

 

2.1 setprop persist.debug.trace 1

adb root
adb shell setprop persist.debug.trace 1
adb reboot

2.2 disable selinux

2.2.1 adb shell

adb root
adb shell setenforce 0 
adb shell stop 
adb shell start

2.2.2 source code to disable it

diff --git a/system/core/init/init.cpp b/system/core/init/init.cpp
index 03ea924..cdc1df9 100644
--- a/init.cpp
+++ b/init.cpp
@@ -977,6 +977,7 @@ static void selinux_initialize(bool in_kernel_domain) {
         }
 
         bool is_enforcing = selinux_is_enforcing();
+  is_enforcing=0;
         security_setenforce(is_enforcing);
 
         if (write_file("/sys/fs/selinux/checkreqprot", "0") == -1) {

2.3 force crash

For excample , trace adbd:

#ps -A |grep adbd
#kill -11 <adbd pid>

save the coredump file from '/data/core/!system!bin!adbd.*.adbd'

3 analysis coredump by gdb

3.1 get ndk

Download 'android-ndk-r10e'.

run gdb :

'android-ndk-r10e\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-gdb.exe'

3.2 copy symbol file to local

save build product under 'out/target/product/msm89xx_64/symbols/'

if just trace adbd, you can just copy 'out/target/product/msm89xx_64/symbols/system/bin/adbd' here.

3.3 load the core dump

3.3.1 check the dump info

(gdb)file adbd
(gdb)core !system!bin!adbd.3358.adbd'
(gdb)info threads
(gdb)t 2
(gdb)bt
(gdb)f 5

3.3.2 set symbol files path.

gdb set solib-search-path symbol_files_path

example: set solib-search-path symbols/system/lib

3.3.3 others

gdb help command
gdb help set
gdb set print pretty on
gdb info
gdb info sharedlibrary
gdb info files
gdb info line 1820
gdb info registers
gdb info locals
 x/FMT ARDRESS

p *name@len
display *name@len
undisplay

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值