summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Rowe <erowe@google.com>2013-10-18 11:59:39 -0700
committerEric Rowe <erowe@google.com>2013-10-18 11:59:39 -0700
commit2f9c26f6bb482ae20a5ee83a7fb4c81cfe9c703f (patch)
tree031e7f07f27adfa7b93a5d54ca27876ed062ec51
parent0e3dec57d860065cde67d9ffd51d39b4ef175c46 (diff)
downloadloganalysis-2f9c26f6bb482ae20a5ee83a7fb4c81cfe9c703f.tar.gz
Parse system_server java crashes better
Change-Id: I6e22091aa054677049598bf64769d2f445a6aae8
-rw-r--r--src/com/android/loganalysis/parser/LogcatParser.java11
-rw-r--r--tests/src/com/android/loganalysis/parser/LogcatParserTest.java26
2 files changed, 37 insertions, 0 deletions
diff --git a/src/com/android/loganalysis/parser/LogcatParser.java b/src/com/android/loganalysis/parser/LogcatParser.java
index 9638402..4a709a0 100644
--- a/src/com/android/loganalysis/parser/LogcatParser.java
+++ b/src/com/android/loganalysis/parser/LogcatParser.java
@@ -69,6 +69,11 @@ public class LogcatParser implements IParser {
"(\\w)/(.+?)\\(\\s*(\\d+)\\): (.*)$"); /* level, tag, pid, msg [2-5] */
/**
+ * Match: "*** FATAL EXCEPTION IN SYSTEM PROCESS: message"
+ */
+ private static final Pattern SYSTEM_SERVER_CRASH = Pattern.compile(
+ "\\*\\*\\* FATAL EXCEPTION IN SYSTEM PROCESS:.*");
+ /**
* Match "Process: com.android.package, PID: 123" or "PID: 123"
*/
private static final Pattern JAVA_CRASH_PROCESS_PID = Pattern.compile(
@@ -283,6 +288,12 @@ public class LogcatParser implements IParser {
data.mLines = data.mLines.subList(i + 1, data.mLines.size());
break;
}
+ m = SYSTEM_SERVER_CRASH.matcher(line);
+ if (m.matches()) {
+ app = "system_server";
+ data.mLines = data.mLines.subList(i + 1, data.mLines.size());
+ break;
+ }
}
item = new JavaCrashParser().parse(data.mLines);
if (item != null) {
diff --git a/tests/src/com/android/loganalysis/parser/LogcatParserTest.java b/tests/src/com/android/loganalysis/parser/LogcatParserTest.java
index 1da3044..f0932da 100644
--- a/tests/src/com/android/loganalysis/parser/LogcatParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/LogcatParserTest.java
@@ -105,6 +105,32 @@ public class LogcatParserTest extends TestCase {
}
/**
+ * Test that Java crashes from system server can be parsed.
+ */
+ public void testParse_java_crash_system_server() throws ParseException {
+ List<String> lines = Arrays.asList(
+ "04-25 09:55:47.799 3064 3082 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: message",
+ "04-25 09:55:47.799 3064 3082 E AndroidRuntime: java.lang.Exception",
+ "04-25 09:55:47.799 3064 3082 E AndroidRuntime: \tat class.method1(Class.java:1)",
+ "04-25 09:55:47.799 3064 3082 E AndroidRuntime: \tat class.method2(Class.java:2)",
+ "04-25 09:55:47.799 3064 3082 E AndroidRuntime: \tat class.method3(Class.java:3)");
+
+ LogcatItem logcat = new LogcatParser("2012").parse(lines);
+ assertNotNull(logcat);
+ assertEquals(parseTime("2012-04-25 09:55:47.799"), logcat.getStartTime());
+ assertEquals(parseTime("2012-04-25 09:55:47.799"), logcat.getStopTime());
+ assertEquals(1, logcat.getEvents().size());
+ assertEquals(1, logcat.getJavaCrashes().size());
+ assertEquals("system_server", logcat.getJavaCrashes().get(0).getApp());
+ assertEquals(3064, logcat.getJavaCrashes().get(0).getPid().intValue());
+ assertEquals(3082, logcat.getJavaCrashes().get(0).getTid().intValue());
+ assertEquals("", logcat.getJavaCrashes().get(0).getLastPreamble());
+ assertEquals("", logcat.getJavaCrashes().get(0).getProcessPreamble());
+ assertEquals(parseTime("2012-04-25 09:55:47.799"),
+ logcat.getJavaCrashes().get(0).getEventTime());
+ }
+
+ /**
* Test that Java crashes with process and pid can be parsed.
*/
public void testParse_java_crash_process_pid() throws ParseException {