/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.loganalysis.parser; import com.android.loganalysis.item.TracesItem; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * A {@link IParser} to parse Android traces files. *
* For now, this only extracts the main stack trace from the first process. It is used to get a
* stack from {@code /data/anr/traces.txt} which can be used to give some context about the ANR. If
* there is a need, this parser can be expanded to parse all stacks from all processes.
*/
public class TracesParser implements IParser {
/**
* Matches: ----- pid PID at YYYY-MM-DD hh:mm:ss -----
*/
private static final Pattern PID = Pattern.compile(
"^----- pid (\\d+) at \\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} -----$");
/**
* Matches: Cmd line: APP
*/
private static final Pattern APP = Pattern.compile("^Cmd ?line: (\\S+).*$");
/**
* Matches: "main" prio=5 tid=1 STATE
*/
private static final Pattern STACK = Pattern.compile("^\"main\" .*$");
/**
* {@inheritDoc}
*
* @return The {@link TracesItem}.
*/
@Override
public TracesItem parse(List