crash repotring.class


SUBMITTED BY: mkoesik12

DATE: Dec. 13, 2017, 1:48 p.m.

FORMAT: Text only

SIZE: 16.5 kB

HITS: 262

  1. package net.minecraft.crash;
  2. import java.io.File;
  3. import java.io.FileWriter;
  4. import java.io.PrintStream;
  5. import java.lang.management.ManagementFactory;
  6. import java.lang.management.RuntimeMXBean;
  7. import java.text.SimpleDateFormat;
  8. import java.util.ArrayList;
  9. import java.util.Date;
  10. import java.util.Iterator;
  11. import java.util.List;
  12. import java.util.concurrent.Callable;
  13. import net.minecraft.util.ReportedException;
  14. import net.minecraft.world.gen.layer.IntCache;
  15. import org.apache.commons.lang3.ArrayUtils;
  16. import org.apache.logging.log4j.LogManager;
  17. import org.apache.logging.log4j.Logger;
  18. public class CrashReport
  19. {
  20. private static final Logger logger = ;
  21. private final String description;
  22. private final Throwable cause;
  23. private final CrashReportCategory theReportCategory = new CrashReportCategory(this, "System Details");
  24. private final List crashReportSections = new ArrayList();
  25. private File crashReportFile;
  26. private boolean field_85059_f = true;
  27. private StackTraceElement[] stacktrace = new StackTraceElement[0];
  28. private static final String __OBFID = "CL_00000990";
  29. public CrashReport(String p_i1348_1_, Throwable p_i1348_2_)
  30. {
  31. this.description = p_i1348_1_;
  32. this.cause = p_i1348_2_;
  33. populateEnvironment();
  34. }
  35. private void populateEnvironment()
  36. {
  37. this.theReportCategory.addCrashSectionCallable("Minecraft Version", new Callable()
  38. {
  39. private static final String __OBFID = "CL_00001197";
  40. public String call()
  41. {
  42. return "1.8";
  43. }
  44. });
  45. this.theReportCategory.addCrashSectionCallable("Operating System", new Callable()
  46. {
  47. private static final String __OBFID = "CL_00001222";
  48. public String call()
  49. {
  50. return System.getProperty("os.name") + " (" + System.getProperty("os.arch") + ") version " + System.getProperty("os.version");
  51. }
  52. });
  53. this.theReportCategory.addCrashSectionCallable("Java Version", new Callable()
  54. {
  55. private static final String __OBFID = "CL_00001248";
  56. public String call()
  57. {
  58. return System.getProperty("java.version") + ", " + System.getProperty("java.vendor");
  59. }
  60. });
  61. this.theReportCategory.addCrashSectionCallable("Java VM Version", new Callable()
  62. {
  63. private static final String __OBFID = "CL_00001275";
  64. public String call()
  65. {
  66. return System.getProperty("java.vm.name") + " (" + System.getProperty("java.vm.info") + "), " + System.getProperty("java.vm.vendor");
  67. }
  68. });
  69. this.theReportCategory.addCrashSectionCallable("Memory", new Callable()
  70. {
  71. private static final String __OBFID = "CL_00001302";
  72. public String call()
  73. {
  74. Runtime var1 = Runtime.getRuntime();
  75. long var2 = var1.maxMemory();
  76. long var4 = var1.totalMemory();
  77. long var6 = var1.freeMemory();
  78. long var8 = var2 / 1024L / 1024L;
  79. long var10 = var4 / 1024L / 1024L;
  80. long var12 = var6 / 1024L / 1024L;
  81. return var6 + " bytes (" + var12 + " MB) / " + var4 + " bytes (" + var10 + " MB) up to " + var2 + " bytes (" + var8 + " MB)";
  82. }
  83. });
  84. this.theReportCategory.addCrashSectionCallable("JVM Flags", new Callable()
  85. {
  86. private static final String __OBFID = "CL_00001329";
  87. public String call()
  88. {
  89. RuntimeMXBean var1 = ManagementFactory.getRuntimeMXBean();
  90. List var2 = var1.getInputArguments();
  91. int var3 = 0;
  92. StringBuilder var4 = new StringBuilder();
  93. Iterator var5 = var2.iterator();
  94. while (var5.hasNext())
  95. {
  96. String var6 = (String)var5.next();
  97. if (var6.startsWith("-X"))
  98. {
  99. if (var3++ > 0) {
  100. var4.append(" ");
  101. }
  102. var4.append(var6);
  103. }
  104. }
  105. return String.format("%d total; %s", new Object[] { Integer.valueOf(var3), var4.toString() });
  106. }
  107. });
  108. this.theReportCategory.addCrashSectionCallable("AABB Pool Size", new Callable()
  109. {
  110. private static final String __OBFID = "CL_00001355";
  111. public String call()
  112. {
  113. byte var1 = 0;
  114. int var2 = 56 * var1;
  115. int var3 = var2 / 1024 / 1024;
  116. byte var4 = 0;
  117. int var5 = 56 * var4;
  118. int var6 = var5 / 1024 / 1024;
  119. return var1 + " (" + var2 + " bytes; " + var3 + " MB) allocated, " + var4 + " (" + var5 + " bytes; " + var6 + " MB) used";
  120. }
  121. });
  122. this.theReportCategory.addCrashSectionCallable("IntCache", new Callable()
  123. {
  124. private static final String __OBFID = "CL_00001382";
  125. public String call()
  126. throws SecurityException, NoSuchFieldException, IllegalAccessException, IllegalArgumentException
  127. {
  128. return IntCache.getCacheSizes();
  129. }
  130. });
  131. }
  132. public String getDescription()
  133. {
  134. return this.description;
  135. }
  136. public Throwable getCrashCause()
  137. {
  138. return this.cause;
  139. }
  140. public void getSectionsInStringBuilder(StringBuilder p_71506_1_)
  141. {
  142. if (((this.stacktrace == null) || (this.stacktrace.length <= 0)) && (this.crashReportSections.size() > 0)) {
  143. this.stacktrace = ((StackTraceElement[])ArrayUtils.subarray(((CrashReportCategory)this.crashReportSections.get(0)).func_147152_a(), 0, 1));
  144. }
  145. if ((this.stacktrace != null) && (this.stacktrace.length > 0))
  146. {
  147. p_71506_1_.append("-- Head --\n");
  148. p_71506_1_.append("Stacktrace:\n");
  149. StackTraceElement[] var2 = this.stacktrace;
  150. int var3 = var2.length;
  151. for (int var4 = 0; var4 < var3; var4++)
  152. {
  153. StackTraceElement var5 = var2[var4];
  154. p_71506_1_.append("\t").append("at ").append(var5.toString());
  155. p_71506_1_.append("\n");
  156. }
  157. p_71506_1_.append("\n");
  158. }
  159. Iterator var6 = this.crashReportSections.iterator();
  160. while (var6.hasNext())
  161. {
  162. CrashReportCategory var7 = (CrashReportCategory)var6.next();
  163. var7.appendToStringBuilder(p_71506_1_);
  164. p_71506_1_.append("\n\n");
  165. }
  166. this.theReportCategory.appendToStringBuilder(p_71506_1_);
  167. }
  168. /* Error */
  169. public String getCauseStackTraceOrString()
  170. {
  171. // Byte code:
  172. // 0: aconst_null
  173. // 1: astore_1
  174. // 2: aconst_null
  175. // 3: astore_2
  176. // 4: aload_0
  177. // 5: getfield 78 net/minecraft/crash/CrashReport:cause Ljava/lang/Throwable;
  178. // 8: astore_3
  179. // 9: aload_3
  180. // 10: checkcast 194 java/lang/Throwable
  181. // 13: invokevirtual 197 java/lang/Throwable:getMessage ()Ljava/lang/String;
  182. // 16: ifnonnull +80 -> 96
  183. // 19: aload_3
  184. // 20: instanceof 199
  185. // 23: ifeq +18 -> 41
  186. // 26: new 199 java/lang/NullPointerException
  187. // 29: dup
  188. // 30: aload_0
  189. // 31: getfield 76 net/minecraft/crash/CrashReport:description Ljava/lang/String;
  190. // 34: invokespecial 202 java/lang/NullPointerException:<init> (Ljava/lang/String;)V
  191. // 37: astore_3
  192. // 38: goto +44 -> 82
  193. // 41: aload_3
  194. // 42: instanceof 208
  195. // 45: ifeq +18 -> 63
  196. // 48: new 208 java/lang/StackOverflowError
  197. // 51: dup
  198. // 52: aload_0
  199. // 53: getfield 76 net/minecraft/crash/CrashReport:description Ljava/lang/String;
  200. // 56: invokespecial 209 java/lang/StackOverflowError:<init> (Ljava/lang/String;)V
  201. // 59: astore_3
  202. // 60: goto +22 -> 82
  203. // 63: aload_3
  204. // 64: instanceof 211
  205. // 67: ifeq +15 -> 82
  206. // 70: new 211 java/lang/OutOfMemoryError
  207. // 73: dup
  208. // 74: aload_0
  209. // 75: getfield 76 net/minecraft/crash/CrashReport:description Ljava/lang/String;
  210. // 78: invokespecial 212 java/lang/OutOfMemoryError:<init> (Ljava/lang/String;)V
  211. // 81: astore_3
  212. // 82: aload_3
  213. // 83: checkcast 194 java/lang/Throwable
  214. // 86: aload_0
  215. // 87: getfield 78 net/minecraft/crash/CrashReport:cause Ljava/lang/Throwable;
  216. // 90: invokevirtual 215 java/lang/Throwable:getStackTrace ()[Ljava/lang/StackTraceElement;
  217. // 93: invokevirtual 219 java/lang/Throwable:setStackTrace ([Ljava/lang/StackTraceElement;)V
  218. // 96: aload_3
  219. // 97: checkcast 194 java/lang/Throwable
  220. // 100: invokevirtual 220 java/lang/Throwable:toString ()Ljava/lang/String;
  221. // 103: astore 4
  222. // 105: new 204 java/io/StringWriter
  223. // 108: dup
  224. // 109: invokespecial 221 java/io/StringWriter:<init> ()V
  225. // 112: astore_1
  226. // 113: new 206 java/io/PrintWriter
  227. // 116: dup
  228. // 117: aload_1
  229. // 118: invokespecial 224 java/io/PrintWriter:<init> (Ljava/io/Writer;)V
  230. // 121: astore_2
  231. // 122: aload_3
  232. // 123: checkcast 194 java/lang/Throwable
  233. // 126: aload_2
  234. // 127: invokevirtual 228 java/lang/Throwable:printStackTrace (Ljava/io/PrintWriter;)V
  235. // 130: aload_1
  236. // 131: invokevirtual 229 java/io/StringWriter:toString ()Ljava/lang/String;
  237. // 134: astore 4
  238. // 136: goto +16 -> 152
  239. // 139: astore 5
  240. // 141: aload_1
  241. // 142: invokestatic 236 org/apache/commons/io/IOUtils:closeQuietly (Ljava/io/Writer;)V
  242. // 145: aload_2
  243. // 146: invokestatic 236 org/apache/commons/io/IOUtils:closeQuietly (Ljava/io/Writer;)V
  244. // 149: aload 5
  245. // 151: athrow
  246. // 152: aload_1
  247. // 153: invokestatic 236 org/apache/commons/io/IOUtils:closeQuietly (Ljava/io/Writer;)V
  248. // 156: aload_2
  249. // 157: invokestatic 236 org/apache/commons/io/IOUtils:closeQuietly (Ljava/io/Writer;)V
  250. // 160: aload 4
  251. // 162: areturn
  252. // Line number table:
  253. // Java source line #217 -> byte code offset #0
  254. // Java source line #218 -> byte code offset #2
  255. // Java source line #219 -> byte code offset #4
  256. // Java source line #221 -> byte code offset #9
  257. // Java source line #223 -> byte code offset #19
  258. // Java source line #225 -> byte code offset #26
  259. // Java source line #226 -> byte code offset #38
  260. // Java source line #227 -> byte code offset #41
  261. // Java source line #229 -> byte code offset #48
  262. // Java source line #230 -> byte code offset #60
  263. // Java source line #231 -> byte code offset #63
  264. // Java source line #233 -> byte code offset #70
  265. // Java source line #236 -> byte code offset #82
  266. // Java source line #239 -> byte code offset #96
  267. // Java source line #243 -> byte code offset #105
  268. // Java source line #244 -> byte code offset #113
  269. // Java source line #245 -> byte code offset #122
  270. // Java source line #246 -> byte code offset #130
  271. // Java source line #247 -> byte code offset #136
  272. // Java source line #249 -> byte code offset #139
  273. // Java source line #250 -> byte code offset #141
  274. // Java source line #251 -> byte code offset #145
  275. // Java source line #252 -> byte code offset #149
  276. // Java source line #250 -> byte code offset #152
  277. // Java source line #251 -> byte code offset #156
  278. // Java source line #254 -> byte code offset #160
  279. // Local variable table:
  280. // start length slot name signature
  281. // 0 163 0 this CrashReport
  282. // 1 152 1 var1 java.io.StringWriter
  283. // 3 154 2 var2 java.io.PrintWriter
  284. // 8 115 3 var3 Object
  285. // 103 58 4 var4 String
  286. // 139 11 5 localObject1 Object
  287. // Exception table:
  288. // from to target type
  289. // 105 139 139 finally
  290. }
  291. public String getCompleteReport()
  292. {
  293. StringBuilder var1 = new StringBuilder();
  294. var1.append("---- Minecraft Crash Report ----\n");
  295. var1.append("// ");
  296. var1.append(getWittyComment());
  297. var1.append("\n\n");
  298. var1.append("Time: ");
  299. var1.append(new SimpleDateFormat().format(new Date()));
  300. var1.append("\n");
  301. var1.append("Description: ");
  302. var1.append(this.description);
  303. var1.append("\n\n");
  304. var1.append(getCauseStackTraceOrString());
  305. var1.append("\n\nA detailed walkthrough of the error, its code path and all known details is as follows:\n");
  306. for (int var2 = 0; var2 < 87; var2++) {
  307. var1.append("-");
  308. }
  309. var1.append("\n\n");
  310. getSectionsInStringBuilder(var1);
  311. return var1.toString();
  312. }
  313. public File getFile()
  314. {
  315. return this.crashReportFile;
  316. }
  317. public boolean saveToFile(File p_147149_1_)
  318. {
  319. if (this.crashReportFile != null) {
  320. return false;
  321. }
  322. if (p_147149_1_.getParentFile() != null) {
  323. p_147149_1_.getParentFile().mkdirs();
  324. }
  325. try
  326. {
  327. FileWriter var2 = new FileWriter(p_147149_1_);
  328. var2.write(getCompleteReport());
  329. var2.close();
  330. this.crashReportFile = p_147149_1_;
  331. return true;
  332. }
  333. catch (Throwable var3)
  334. {
  335. logger.error("Could not save crash report to " + p_147149_1_, var3);
  336. }
  337. return false;
  338. }
  339. public CrashReportCategory getCategory()
  340. {
  341. return this.theReportCategory;
  342. }
  343. public CrashReportCategory makeCategory(String p_85058_1_)
  344. {
  345. return makeCategoryDepth(p_85058_1_, 1);
  346. }
  347. public CrashReportCategory makeCategoryDepth(String p_85057_1_, int p_85057_2_)
  348. {
  349. CrashReportCategory var3 = new CrashReportCategory(this, p_85057_1_);
  350. if (this.field_85059_f)
  351. {
  352. int var4 = var3.getPrunedStackTrace(p_85057_2_);
  353. StackTraceElement[] var5 = this.cause.getStackTrace();
  354. StackTraceElement var6 = null;
  355. StackTraceElement var7 = null;
  356. int var8 = var5.length - var4;
  357. if (var8 < 0) {
  358. System.out.println("Negative index in crash report handler (" + var5.length + "/" + var4 + ")");
  359. }
  360. if ((var5 != null) && (var8 >= 0) && (var8 < var5.length))
  361. {
  362. var6 = var5[var8];
  363. if (var5.length + 1 - var4 < var5.length) {
  364. var7 = var5[(var5.length + 1 - var4)];
  365. }
  366. }
  367. this.field_85059_f = var3.firstTwoElementsOfStackTraceMatch(var6, var7);
  368. if ((var4 > 0) && (!this.crashReportSections.isEmpty()))
  369. {
  370. CrashReportCategory var9 = (CrashReportCategory)this.crashReportSections.get(this.crashReportSections.size() - 1);
  371. var9.trimStackTraceEntriesFromBottom(var4);
  372. }
  373. else if ((var5 != null) && (var5.length >= var4) && (var8 >= 0) && (var8 < var5.length))
  374. {
  375. this.stacktrace = new StackTraceElement[var8];
  376. System.arraycopy(var5, 0, this.stacktrace, 0, this.stacktrace.length);
  377. }
  378. else
  379. {
  380. this.field_85059_f = false;
  381. }
  382. }
  383. this.crashReportSections.add(var3);
  384. return var3;
  385. }
  386. private static String getWittyComment()
  387. {
  388. String[] var0 = { "Who set us up the TNT?", "Everything's going to plan. No, really, that was supposed to happen.", "Uh... Did I do that?", "Oops.", "Why did you do that?", "I feel sad now :(", "My bad.", "I'm sorry, Dave.", "I let you down. Sorry :(", "On the bright side, I bought you a teddy bear!", "Daisy, daisy...", "Oh - I know what I did wrong!", "Hey, that tickles! Hehehe!", "I blame Dinnerbone.", "You should try our sister game, Minceraft!", "Don't be sad. I'll do better next time, I promise!", "Don't be sad, have a hug! <3", "I just don't know what went wrong :(", "Shall we play a game?", "Quite honestly, I wouldn't worry myself about that.", "I bet Cylons wouldn't have this problem.", "Sorry :(", "Surprise! Haha. Well, this is awkward.", "Would you like a cupcake?", "Hi. I'm Minecraft, and I'm a crashaholic.", "Ooh. Shiny.", "This doesn't make any sense!", "Why is it breaking :(", "Don't do that.", "Ouch. That hurt :(", "You're mean.", "This is a token for 1 free hug. Redeem at your nearest Mojangsta: [~~HUG~~]", "There are four lights!", "But it works on my machine." };
  389. try
  390. {
  391. return var0[((int)(System.nanoTime() % var0.length))];
  392. }
  393. catch (Throwable var2) {}
  394. return "Witty comment unavailable :(";
  395. }
  396. public static CrashReport makeCrashReport(Throwable p_85055_0_, String p_85055_1_)
  397. {
  398. CrashReport var2;
  399. CrashReport var2;
  400. if ((p_85055_0_ instanceof ReportedException)) {
  401. var2 = ((ReportedException)p_85055_0_).getCrashReport();
  402. } else {
  403. var2 = new CrashReport(p_85055_1_, p_85055_0_);
  404. }
  405. return var2;
  406. }
  407. }

comments powered by Disqus