如何用crash找到进程完整的命令

本文介绍如何使用Crash工具解析Linux系统中运行的Ping命令及其参数。通过展示具体的Crash命令操作步骤,如获取进程信息、内存映射详情等,帮助读者理解如何深入解析进程的执行状态。

如果仅仅是找到命令本身,task_struct.comm就够了,如果要找到后面的参数则需要花些功夫:

crash> ps | grep ping
  23552  23216   7  ffff8fd784dfc500  IN   0.0  135716   3896  ping
crash> task_struct.comm ffff8fd784dfc500
  comm = "ping\000 server\000\000\000"
crash> task_struct.mm ffff8fd784dfc500
  mm = 0xffff8fd7844b0c00
crash> mm_struct.arg_start,arg_end 0xffff8fd7844b0c00
    arg_start = 0x7ffcd3d0d5b9
    arg_end = 0x7ffcd3d0d5cb
crash> vtop 0x7ffcd3d0d5b9 -c ffff8fd784dfc500
VIRTUAL     PHYSICAL
7ffcd3d0d5b9  805e975b9

   PGD: 82a74e7f8 => 8000000844c1b067
   PUD: 844c1bf98 => 80a9bd067
   PMD: 80a9bd4f0 => 80b1e3067
   PTE: 80b1e3868 => 8000000805e97067
  PAGE: 805e97000

      PTE         PHYSICAL   FLAGS
8000000805e97067  805e97000  (PRESENT|RW|USER|ACCESSED|DIRTY|NX)

      VMA           START       END     FLAGS FILE
ffff8fdf91282d48 7ffcd3ced000 7ffcd3d0e000 100173

      PAGE        PHYSICAL      MAPPING       INDEX CNT FLAGS
ffffea916017a5c0 805e97000 ffff8fd74c33ee71 7fffffffe  1 17ffffc0080036 referenced,uptodate,lru,active,swapbacked
crash> vtop 0x7ffcd3d0d5cb -c ffff8fd784dfc500
VIRTUAL     PHYSICAL
7ffcd3d0d5cb  805e975cb

   PGD: 82a74e7f8 => 8000000844c1b067
   PUD: 844c1bf98 => 80a9bd067
   PMD: 80a9bd4f0 => 80b1e3067
   PTE: 80b1e3868 => 8000000805e97067
  PAGE: 805e97000

      PTE         PHYSICAL   FLAGS
8000000805e97067  805e97000  (PRESENT|RW|USER|ACCESSED|DIRTY|NX)

      VMA           START       END     FLAGS FILE
ffff8fdf91282d48 7ffcd3ced000 7ffcd3d0e000 100173

      PAGE        PHYSICAL      MAPPING       INDEX CNT FLAGS
ffffea916017a5c0 805e97000 ffff8fd74c33ee71 7fffffffe  1 17ffffc0080036 referenced,uptodate,lru,active,swapbacked
crash> rd -p 805e975b9 -e 805e975cb
       805e975b9:  32393100676e6970 312e312e3836312e   ping.192.168.1.1

 完整的命令就是"ping 192.168.1.1"

查看 Android 进程中 Java 堆栈,可以使用 `adb` 命令结合系统工具来实现。以下是几种常用的方法: ### 使用 `adb shell dumpsys` 命令 可以使用 `dumpsys` 工具查看当前系统中某个进程的状态信息,包括 Java 堆栈的简要信息。具体命令如下: ```bash adb shell dumpsys activity <package_name> ``` 该命令会输出与指定应用相关的 Activity 管理器信息,其中包含当前运行的进程和线程状态。在输出中可以找到部分与堆栈相关的信息,适用于诊断 ANR(Application Not Responding)问题。 ### 使用 `adb shell jstack` 命令 对于调试 Java 堆栈,`jstack` 是一个直接的工具,它可以输出 Java 虚拟机中所有线程的堆栈信息。Android 从 8.0(API 26)开始支持 `jstack`,具体使用方法如下: ```bash adb shell jstack -p <pid> ``` 其中 `<pid>` 是目标进程的 ID。执行该命令后,会输出该进程中所有线程的 Java 堆栈信息。 ### 使用 `adb logcat` 查看崩溃堆栈 当应用发生 Java 异常导致崩溃时,堆栈信息会记录在 `logcat` 中。可以通过以下命令查看: ```bash adb logcat -b crash ``` 或者过滤特定的标签: ```bash adb logcat *:E ``` 这会显示错误级别的日志,并通常包含导致崩溃的 Java 异常堆栈。 ### 使用 `am` 命令触发 ANR 并输出堆栈 如果需要手动触发 ANR(Application Not Responding)来查看堆栈信息,可以使用以下命令: ```bash adb shell am set-debug-app --wait <package_name> ``` 然后让应用进入 ANR 状态,系统会自动生成 ANR 日志,包含详细的 Java 堆栈信息,日志文件位于 `/data/anr/` 目录下。可以使用以下命令导出日志: ```bash adb pull /data/anr/traces.txt ``` ### 使用 `debuggerd` 工具(针对 Native 崩溃) 虽然 `debuggerd` 主要用于 Native 崩溃的堆栈信息,但在某些情况下也与 Java 崩溃有关联。Native 崩溃的信息会保存在 `/data/tombstone/` 目录下,最多保存 10 个文件。可以使用以下命令查看: ```bash adb shell cat /data/tombstone/tombstone_XX ``` 其中 `XX` 表示文件编号(如 `tombstone_00`)。 ### 使用 `gdb` 或 `gdbserver`(高级调试) 对于需要更深入调试的情况,可以通过 `gdb` 或 `gdbserver` 连接到目标进程并手动检查堆栈信息。这通常适用于需要分析 Native 代码与 Java 交互的情况。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值