https://github.com/qualcomm/crash-plugins
该插件扩展了很多crash的命令,项目使用Cmake进行编译,Cmake要求版本大于3.21.1,依赖libzstd-dev、libelf-dev、libsystemd-dev等lib。
具体编译以及使用的命令可参考仓库主页,简单的编译命令如下:
cmake -DCMAKE_C_COMPILER="/usr/bin/gcc" \
-DCMAKE_CXX_COMPILER="/usr/bin/g++" \
-DCMAKE_BUILD_TYPE="Debug" \
-DCMAKE_BUILD_TARGET_ARCH="arm64" \
-DBUILD_TARGET_TOGETHER="1" \
-B output/arm64
cmake --build output/arm64
编译后会在output路径下生成plugins.so,可在crash中使用extend命令来加载:
crash> extend <path-to>/output/arm64/plugins.so
需要注意的是,因插件中使用了get_config_val函数来获取一些内核的config配置,所以需要ramdump对应的kernel开启CONFIG_IKCONFIG,否则会在get_config_val中报错用不了,那如果你当前的dump已经没有开到CONFIG_IKCONFIG怎么办,如果当前系统的配置你是确定的,可以在Crash-plugins的源码中把get_config_val修改成你确定的配置即可,如:
std::string config = get_config_val("CONFIG_ARM64_VA_BITS");
int va_bits = std::stoi(config);
这里的va_bits 是去读取CONFIG_ARM64_VA_BITS的值,如果你已经确定当前dump的va_bits是多少,如39,那就可以把这个get_config_val这里去掉,直接int va_bits = 39,当然这个只针对你当前的dump已经没有开到CONFIG_IKCONFIG又想使用这个插件的情况,还有就是类似如下所示:
if(get_config_val("CONFIG_PAGE_EXTENSION") != "y")
如果你已经确定你的dump中CONFIG_PAGE_EXTENSION是开的,那可以直接把这个if判断去掉即可;
个人使用的总体感受是,命令很强大,如果是crash的推导,其实不用插件自己手动推导也可以,也花不了多少时间,但是如果是一些统计类的问题,例如一些内存占用类的问题,怀疑内存泄漏等需要统计各个pid不同路径的内存占用情况的话,就必须要使用软件来自动统计了,像该项目就已经集成了此类功能。
夜雨聆风