📄 aediagnostics.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: AEDiagnostics.java
package org.gudy.azureus2.core3.util;
import com.aelitis.azureus.core.util.Java15Utils;
import java.io.*;
import java.lang.reflect.Method;
import java.util.*;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.logging.LogAlert;
import org.gudy.azureus2.core3.logging.Logger;
import org.gudy.azureus2.platform.*;
// Referenced classes of package org.gudy.azureus2.core3.util:
// AEDiagnosticsEvidenceGenerator, AEDiagnosticsLogger, Debug, FileUtil,
// IndentWriter, SystemProperties, SystemTime, AEThread2,
// SimpleTimer, TimerEventPerformer, TimerEvent
public class AEDiagnostics
{
public static final boolean ALWAYS_PASS_HASH_CHECKS = false;
public static final boolean USE_DUMMY_FILE_DATA = false;
public static final boolean CHECK_DUMMY_FILE_DATA = false;
public static final boolean DEBUG_MONITOR_SEM_USAGE = false;
public static final boolean DEBUG_THREADS = true;
public static final boolean TRACE_DIRECT_BYTE_BUFFERS = false;
public static final boolean TRACE_DBB_POOL_USAGE = false;
public static final boolean PRINT_DBB_POOL_USAGE = false;
public static final boolean TRACE_TCP_TRANSPORT_STATS = false;
public static final boolean TRACE_CONNECTION_DROPS = false;
private static final int MAX_FILE_SIZE;
private static final String CONFIG_KEY = "diagnostics.tidy_close";
private static File debug_dir;
private static File debug_save_dir;
private static boolean started_up;
private static boolean startup_complete;
private static boolean enable_pending_writes;
private static Map loggers = new HashMap();
protected static boolean loggers_enabled;
private static List evidence_generators = new ArrayList();
private static boolean load_15_tried;
private static final String bad_dlls[][] = {
{
"niphk", "y"
}, {
"nvappfilter", "y"
}, {
"netdog", "y"
}, {
"vlsp", "y"
}, {
"imon", "y"
}, {
"sarah", "y"
}, {
"MxAVLsp", "y"
}, {
"mclsp", "y"
}, {
"radhslib", "y"
}, {
"winsflt", "y"
}, {
"nl_lsp", "y"
}, {
"AxShlex", "y"
}, {
"iFW_Xfilter", "y"
}, {
"gapsp", "y"
}, {
"WSOCKHK", "n"
}
};
public AEDiagnostics()
{
}
public static synchronized void startup(boolean _enable_pending)
{
if (started_up)
return;
started_up = true;
enable_pending_writes = _enable_pending;
boolean transitoryStartup = System.getProperty("transitory.startup", "0").equals("1");
if (!transitoryStartup)
break MISSING_BLOCK_LABEL_48;
load_15_tried = true;
loggers_enabled = false;
startup_complete = true;
load15Stuff();
return;
debug_dir = FileUtil.getUserFile("logs");
debug_save_dir = new File(debug_dir, "save");
loggers_enabled = COConfigurationManager.getBooleanParameter("Logger.DebugFiles.Enabled");
boolean was_tidy = COConfigurationManager.getBooleanParameter("diagnostics.tidy_close");
(new AEThread2("asyncify", true) {
public void run()
{
SimpleTimer.addEvent("AEDiagnostics:logCleaner", SystemTime.getCurrentTime() + 60000L + (long)(int)(Math.random() * 15000D), new TimerEventPerformer() {
final 1 this$0;
public void perform(TimerEvent event)
{
AEDiagnostics.cleanOldLogs();
}
{
this$0 = 1.this;
super();
}
});
}
}).start();
if (debug_dir.exists())
{
long now = SystemTime.getCurrentTime();
debug_save_dir.mkdir();
File files[] = debug_dir.listFiles();
if (files != null)
{
boolean file_copied = false;
for (int i = 0; i < files.length; i++)
{
File file = files[i];
if (!file.isDirectory() && !was_tidy)
{
file_copied = true;
FileUtil.copyFile(file, new File(debug_save_dir, (new StringBuilder()).append(now).append("_").append(file.getName()).toString()));
}
}
if (file_copied)
Logger.logTextResource(new LogAlert(false, 1, "diagnostics.log_found"), new String[] {
debug_save_dir.toString()
});
}
} else
{
debug_dir.mkdir();
}
startup_complete = true;
load15Stuff();
break MISSING_BLOCK_LABEL_305;
Throwable e;
e;
if (!(e instanceof NoClassDefFoundError))
Debug.printStackTrace(e);
startup_complete = true;
load15Stuff();
break MISSING_BLOCK_LABEL_305;
Exception exception;
exception;
startup_complete = true;
load15Stuff();
throw exception;
}
protected static void load15Stuff()
{
if (load_15_tried)
return;
load_15_tried = true;
try
{
Class c = Class.forName("com.aelitis.azureus.jdk15.Java15Initialiser");
if (c != null)
{
Method m = c.getDeclaredMethod("getUtilsProvider", new Class[0]);
com.aelitis.azureus.core.util.Java15Utils.Java15UtilsProvider provider = (com.aelitis.azureus.core.util.Java15Utils.Java15UtilsProvider)m.invoke(null, new Object[0]);
if (provider != null)
Java15Utils.setProvider(provider);
}
}
catch (Throwable e) { }
}
public static void dumpThreads()
{
Java15Utils.dumpThreads();
}
protected static void cleanOldLogs()
{
try
{
long now = SystemTime.getCurrentTime();
File files[] = debug_save_dir.listFiles();
if (files != null)
{
for (int i = 0; i < files.length; i++)
{
File file = files[i];
if (!file.isDirectory())
{
long last_modified = file.lastModified();
if (now - last_modified > 0x337f9800L)
file.delete();
}
}
}
}
catch (Exception e) { }
}
public static boolean isStartupComplete()
{
return startup_complete;
}
public static File getLogDir()
{
startup(false);
return debug_dir;
}
public static synchronized void flushPendingLogs()
{
AEDiagnosticsLogger logger;
for (Iterator i$ = loggers.values().iterator(); i$.hasNext(); logger.writePending())
logger = (AEDiagnosticsLogger)i$.next();
enable_pending_writes = false;
}
public static synchronized AEDiagnosticsLogger getLogger(String name)
{
AEDiagnosticsLogger logger = (AEDiagnosticsLogger)loggers.get(name);
if (logger == null)
{
startup(false);
logger = new AEDiagnosticsLogger(debug_dir, name, MAX_FILE_SIZE, !enable_pending_writes);
loggers.put(name, logger);
}
return logger;
}
public static void logWithStack(String logger_name, String str)
{
log(logger_name, (new StringBuilder()).append(str).append(": ").append(Debug.getCompressedStackTrace()).toString());
}
public static void log(String logger_name, String str)
{
getLogger(logger_name).log(str);
}
public static void markDirty()
{
try
{
COConfigurationManager.setParameter("diagnostics.tidy_close", false);
COConfigurationManager.save();
}
catch (Throwable e)
{
Debug.printStackTrace(e);
}
}
public static boolean isDirty()
{
return !COConfigurationManager.getBooleanParameter("diagnostics.tidy_close");
}
public static void markClean()
{
try
{
COConfigurationManager.setParameter("diagnostics.tidy_close", true);
COConfigurationManager.save();
}
catch (Throwable e)
{
Debug.printStackTrace(e);
}
}
public static void checkDumpsAndNatives()
{
try
{
PlatformManager p_man = PlatformManagerFactory.getPlatformManager();
if (p_man.getPlatformType() == 1 && p_man.hasCapability(PlatformManagerCapabilities.TestNativeAvailability))
{
for (int i = 0; i < bad_dlls.length; i++)
{
String dll = bad_dlls[i][0];
String load = bad_dlls[i][1];
if (load.equalsIgnoreCase("n") || COConfigurationManager.getBooleanParameter((new StringBuilder()).append("platform.win32.dll_found.").append(dll).toString(), false))
continue;
try
{
if (p_man.testNativeAvailability((new StringBuilder()).append(dll).append(".dll").toString()))
{
COConfigurationManager.setParameter((new StringBuilder()).append("platform.win32.dll_found.").append(dll).toString(), true);
String detail = MessageText.getString((new StringBuilder()).append("platform.win32.baddll.").append(dll).toString());
Logger.logTextResource(new LogAlert(true, 1, "platform.win32.baddll.info"), new String[] {
(new StringBuilder()).append(dll).append(".dll").toString(), detail
});
}
}
catch (Throwable e)
{
Debug.printStackTrace(e);
}
}
}
File app_dir = new File(SystemProperties.getApplicationPath());
if (app_dir.canRead())
{
File files[] = app_dir.listFiles();
File most_recent_dump = null;
long most_recent_time = 0L;
long now = SystemTime.getCurrentTime();
long one_week_ago = now - 0x240c8400L;
for (int i = 0; i < files.length; i++)
{
File f = files[i];
String name = f.getName();
if (!name.startsWith("hs_err_pid"))
continue;
long last_mod = f.lastModified();
if (last_mod > most_recent_time && last_mod > one_week_ago)
{
most_recent_dump = f;
most_recent_time = last_mod;
}
}
if (most_recent_dump != null)
{
long last_done = COConfigurationManager.getLongParameter("diagnostics.dump.lasttime", 0L);
if (last_done < most_recent_time)
{
COConfigurationManager.setParameter("diagnostics.dump.lasttime", most_recent_time);
analyseDump(most_recent_dump);
}
}
}
}
catch (Throwable e)
{
Debug.printStackTrace(e);
}
}
protected static void analyseDump(File file)
{
System.out.println((new StringBuilder()).append("Analysing ").append(file).toString());
LineNumberReader lnr = new LineNumberReader(new FileReader(file));
boolean float_excep = false;
String bad_dlls_uc[] = new String[bad_dlls.length];
for (int i = 0; i < bad_dlls.length; i++)
{
String dll = bad_dlls[i][0];
bad_dlls_uc[i] = (new StringBuilder()).append(dll).append(".dll").toString().toUpperCase();
}
String alcohol_dll = "AxShlex";
List matches = new ArrayList();
do
{
String line = lnr.readLine();
if (line == null)
break;
line = line.toUpperCase();
if (line.indexOf("EXCEPTION_FLT") != -1)
{
float_excep = true;
} else
{
int i = 0;
while (i < bad_dlls_uc.length)
{
String b_uc = bad_dlls_uc[i];
if (line.indexOf(b_uc) != -1)
{
String dll = bad_dlls[i][0];
if (dll.equals(alcohol_dll))
{
if (float_excep)
matches.add(dll);
} else
{
matches.add(dll);
}
}
i++;
}
}
} while (true);
for (int i = 0; i < matches.size(); i++)
{
String dll = (String)matches.get(i);
String detail = MessageText.getString((new StringBuilder()).append("platform.win32.baddll.").append(dll).toString());
Logger.logTextResource(new LogAlert(true, 1, "platform.win32.baddll.info"), new String[] {
(new StringBuilder()).append(dll).append(".dll").toString(), detail
});
}
lnr.close();
break MISSING_BLOCK_LABEL_369;
Exception exception;
exception;
lnr.close();
throw exception;
Throwable e;
e;
Debug.printStackTrace(e);
}
public static void addEvidenceGenerator(AEDiagnosticsEvidenceGenerator gen)
{
synchronized (evidence_generators)
{
evidence_generators.add(gen);
}
}
public static void generateEvidence(PrintWriter _writer)
{
IndentWriter writer;
writer = new IndentWriter(_writer);
synchronized (evidence_generators)
{
for (int i = 0; i < evidence_generators.size(); i++)
try
{
((AEDiagnosticsEvidenceGenerator)evidence_generators.get(i)).generate(writer);
}
catch (Throwable e)
{
e.printStackTrace(_writer);
}
}
writer.println("Memory");
writer.indent();
Runtime rt = Runtime.getRuntime();
writer.println((new StringBuilder()).append("max=").append(rt.maxMemory()).append(",total=").append(rt.totalMemory()).append(",free=").append(rt.freeMemory()).toString());
writer.exdent();
break MISSING_BLOCK_LABEL_156;
Exception exception1;
exception1;
writer.exdent();
throw exception1;
}
static
{
int maxFileSize = 0x40000;
try
{
String logSize = System.getProperty("diag.logsize", null);
if (logSize != null)
if (logSize.toLowerCase().endsWith("m"))
maxFileSize = Integer.parseInt(logSize.substring(0, logSize.length() - 1)) * 1024 * 1024;
else
maxFileSize = Integer.parseInt(logSize);
}
catch (Throwable t) { }
MAX_FILE_SIZE = maxFileSize;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -