android13 systrace无法显示问题

#!/bin/bash
datename=$(date +%Y%m%d_%H%M%S)
filename=systrace_$datename.ftrace
#adb shell "echo 1 > /sys/kernel/debug/tracing/events/filemap/enable"
#adb shell "echo 1 > /sys/kernel/debug/tracing/events/ext4/enable"
/mnt/d/ADB/adb.exe shell "echo 1 > /sys/kernel/tracing/events/schedwalt/waltgov_next_freq/enable" 
/mnt/d/ADB/adb.exe shell "echo 1 > /sys/kernel/tracing/events/schedwalt/sched_update_history/enable" 
/mnt/d/ADB/adb.exe shell "atrace -t 5 -b 20480 gfx binder_driver memory input wm am sched view res disk freq" > $filename
sed -i '1,2d' $filename
java -cp /mnt/d/lib.jar com.example.KernelTraceUtils $filename waltgov_next_freq sched_update_history
/mnt/d/ADB/adb.exe shell "echo 0 > /sys/kernel/tracing/events/schedwalt/waltgov_next_freq/enable" 
/mnt/d/ADB/adb.exe shell "echo 0 > /sys/kernel/tracing/events/schedwalt/sched_update_history/enable" 

android13上通过上述脚本抓的ftrace无法打开,最后分析是最新的kernel版本多了一栏,导致tracing.js解析报错请添加图片描述
这里提供一种改法:

lineREWithTGID=new RegExp('^\\s*(.+)-(\\d+)\\s+\\(\\s*(\\d+|-+)\\)\\s\\[(\\d+)\\]'+'\\s+[dX.][Nnp.][Hhs.][0-9a-f.]'+'\\s+(\\d+\\.\\d+):\\s+(\\S+):\\s(.*)$');
lineREWithTGID=new RegExp('^\\s*(.+)-(\\d+)\\s+\\(\\s*(\\d+|-+)\\)\\s\\[(\\d+)\\]'+'\\s+[dX.][Nnp.][Hhs.][0-9a-f.][0-9a-f.]'+'\\s+(\\d+\\.\\d+):\\s+(\\S+):\\s(.*)$');

kernel trace tag显示

package com.example;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class KernelTraceUtils {
    static Pattern TID = Pattern.compile("^.*-([0-9]{1,5})");
    public static void main(String[] args) throws IOException {
        String path = args[0];
        List<Pattern> targets = new ArrayList<>();
        for (int i = 1; i < args.length; i++) {
            targets.add(Pattern.compile("(^.*)" + args[i] + ":"));
        }
        List<String> lines = Files.readAllLines(Paths.get(path));
        BufferedWriter writer = new BufferedWriter(new FileWriter(path));
        for (String line : lines) {
            String newLine = null;
            String prefix = match(targets, line);
            if (prefix != null) {
                Matcher m = TID.matcher(prefix);
                m.find();
                String tid = m.group(1);
                line = line.replace(prefix, prefix + "tracing_mark_write: B|" + tid + "|");
                newLine = prefix + "tracing_mark_write: E|" + tid + "|";
            }
            writer.write(line);
            writer.newLine();
            if (newLine != null) {
                writer.write(newLine);
                writer.newLine();
            }
        }
        writer.close();
    }

    public static String match(List<Pattern> targets, String line) {
        String ret = null;
        for (Pattern pattern : targets) {
            Matcher m = pattern.matcher(line);
            if (m.find()) {
                ret = m.group(1);
            }
        }
        return ret;
    }
}
  • wsl2 ftrace线程号不对问题
package org.example;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class KernelTraceUtils {
    static Pattern uPID = Pattern.compile("tracing_mark_write:.*[BE]{1}\\|(\\d{2,6})");
    static Pattern kPID = Pattern.compile("\\(\\s*(\\d+)\\)");
    static HashMap<Integer, Integer> map = new HashMap<>();
    public static void main(String[] args) throws IOException, InterruptedException {
        String path = args[0];
        List<String> lines = Files.readAllLines(Paths.get(path));
        BufferedWriter writer = new BufferedWriter(new FileWriter(path));
        for (String line : lines) {
            if (line.contains("JNI_CreateJavaVM")) {
                Matcher m = kPID.matcher(line);
                m.find();
                int kpid = Integer.parseInt(m.group(1));
                m = uPID.matcher(line);
                m.find();
                int upid = Integer.parseInt(m.group(1));
                map.put(upid, kpid);
            }
            if (line.contains("tracing_mark_write: B|") || line.contains("tracing_mark_write: E|")) {
                Matcher m = uPID.matcher(line);
                m.find();
                int upid = Integer.parseInt(m.group(1));
                int kpid = map.get(upid);
                line = line.replace(""+upid, ""+kpid);
            }
            writer.write(line);
            writer.newLine();
        }
        writer.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值