利用strace除錯關機充電服務程式

2021-09-01 11:35:53 字數 1703 閱讀 7477

external/strace/android.mk 補丁如下:

--- a/android.mk

+++ b/android.mk

@@ -232,7 +232,7 @@ local_c_includes_x86_64 := $(local_path)/linux/x86_64 $(local_path)/linux

local_module := strace

-local_module_path := $(target_out_optional_executables)

+local_module_path := $(target_root_out_sbin)

local_module_tags := debug

strace缺省會編譯到target_out_optional_executables,其實是在system分割槽裡,為了簡化我們的編譯過程,我們這裡把它修改到target_root_out_sbin,這樣我們不用耗時重新編譯system分割槽,只需要編譯bootimage分割槽即可。strace預設是userdebug才會編譯,所以如果不是userdebug版本,我們還需要修改上面的local_module_tags。

進入到system/core目錄,加入如下patch:

diff --git a/rootdir/init.rc b/rootdir/init.rc

index 2c26afe..be4e572 100644

--- a/rootdir/init.rc

+++ b/rootdir/init.rc

@@ -711,6 +711,11 @@ on property:security.perf_harden=1

# in device's init.rc, this trigger can be used to do device-specific actions

# before shutdown. e.g disable watchdog and mask error handling

+service charger /sbin/strace -o /data/charger.strace /charger

+ class charger

+ group system graphics

+ seclabel u:r:healthd:s0

+ ## daemon processes to be run by init.

## service ueventd /sbin/ueventd

這裡主要修改init.rc原因和上面一樣,是為了方便編譯,因為init.rc是儲存在boot分割槽根目錄下的,所以最終我們只需要編譯更新boot分割槽即可。

關鍵的步驟是重構charger service為:

/sbin/strace -o /data/charger.strace /charger

這樣就可以用strace記錄charger執行的相關log到/data/charger.strace檔案中。

需要配置selinux為permissive,放開strace的執行許可權。

boardconfig.mk:

board_kernel_cmdline:=(省略......)androidboot.selinux=permissive

利用strace 除錯程式

strace p pid 除錯程式 可以看到程序執行的過程,顯示的是系統呼叫的函式,同時可以看出系統呼叫的返回值 core除錯 在root使用者下執行sysctl a grep core,檢視core檔案的配置是否正確 命令設定 1 使用命令 ulimit c unlimited 設定coredum...

除錯技巧 三 strace

在linux系統中,strace是一種相當有效的跟蹤工具,它的主要特點是可以被用來監視系統呼叫。我們不僅可以用strace除錯乙個新開始的程式,也可以除錯乙個已經在執行的程式 這意味著把strace繫結到乙個已有的pid上 對於globalmem字元裝置檔案,以strace方式執行如 所示的使用者空...

除錯工具Strace

0.strace是什麼?按照strace官網的描述,strace是乙個可用於診斷 除錯和教學的linux使用者空間 我們用它來監控使用者空間程序和核心的互動,比如系統呼叫 訊號傳遞 程序狀態變更等。原始碼 1.編譯移植strace configure prefix pwd install 以x86平...