From 53e3a45d8fa5475dfdc3f0cf00ded1895e3cc1d7 Mon Sep 17 00:00:00 2001 From: dswitkin Date: Sun, 13 Dec 2009 17:10:02 +0000 Subject: [PATCH] Added the ability to track who is throwing exceptions and how often in the core library. Uncomment to enable it. git-svn-id: http://zxing.googlecode.com/svn/trunk@1155 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../src/com/google/zxing/ReaderException.java | 44 +++++++++++++++++++ .../zxing/client/j2se/CommandLineRunner.java | 4 ++ 2 files changed, 48 insertions(+) diff --git a/core/src/com/google/zxing/ReaderException.java b/core/src/com/google/zxing/ReaderException.java index 0d8a3d53..4e6a90f7 100644 --- a/core/src/com/google/zxing/ReaderException.java +++ b/core/src/com/google/zxing/ReaderException.java @@ -36,14 +36,58 @@ public final class ReaderException extends Exception { private static final ReaderException instance = new ReaderException(); + // EXCEPTION TRACKING SUPPORT + // Identifies who is throwing exceptions and how often. To use: + // + // 1. Uncomment these lines and the code below which uses them. + // 2. Uncomment the two corresponding lines in j2se/CommandLineRunner.decode() + // 3. Change core to build as Java 1.5 temporarily +// private static int exceptionCount = 0; +// private static Map throwers = new HashMap(32); + private ReaderException() { // do nothing } public static ReaderException getInstance() { +// Exception e = new Exception(); +// // Take the stack frame before this one. +// StackTraceElement stack = e.getStackTrace()[1]; +// String key = stack.getClassName() + "." + stack.getMethodName() + "(), line " + +// stack.getLineNumber(); +// if (throwers.containsKey(key)) { +// Integer value = throwers.get(key); +// value++; +// throwers.put(key, value); +// } else { +// throwers.put(key, 1); +// } +// exceptionCount++; + return instance; } +// public static int getExceptionCountAndReset() { +// int temp = exceptionCount; +// exceptionCount = 0; +// return temp; +// } +// +// public static String getThrowersAndReset() { +// StringBuilder builder = new StringBuilder(1024); +// Object[] keys = throwers.keySet().toArray(); +// for (int x = 0; x < keys.length; x++) { +// String key = (String) keys[x]; +// Integer value = throwers.get(key); +// builder.append(key); +// builder.append(": "); +// builder.append(value); +// builder.append("\n"); +// } +// throwers.clear(); +// return builder.toString(); +// } + // Prevent stack traces from being taken // srowen says: huh, my IDE is saying this is not an override. native methods can't be overridden? // This, at least, does not hurt. Because we use a singleton pattern here, it doesn't matter anyhow. diff --git a/javase/src/com/google/zxing/client/j2se/CommandLineRunner.java b/javase/src/com/google/zxing/client/j2se/CommandLineRunner.java index a607cd68..f9ccf7c4 100644 --- a/javase/src/com/google/zxing/client/j2se/CommandLineRunner.java +++ b/javase/src/com/google/zxing/client/j2se/CommandLineRunner.java @@ -200,6 +200,10 @@ public final class CommandLineRunner { } catch (ReaderException e) { System.out.println(uri.toString() + ": No barcode found"); return null; + } finally { + // Uncomment these lines when turning on exception tracking in ReaderException. + //System.out.println("Threw " + ReaderException.getExceptionCountAndReset() + " exceptions"); + //System.out.println("Throwers:\n" + ReaderException.getThrowersAndReset()); } } -- 2.20.1