Эта возможность была удалена из LeakCanary 2, но вы можете воссоздать ее для своих собственных нужд. См. Код в LeakCanary 1.6: https://github.com/square/leakcanary/blob/v1.6.3/leakcanary-analyzer/src/main/java/com/squareup/leakcanary/AnalysisResult.java#L104 -L133
public @NonNull RuntimeException leakTraceAsFakeException() {
if (!leakFound) {
throw new UnsupportedOperationException(
"leakTraceAsFakeException() can only be called when leakFound is true");
}
LeakTraceElement firstElement = leakTrace.elements.get(0);
String rootSimpleName = classSimpleName(firstElement.className);
String leakSimpleName = classSimpleName(className);
String exceptionMessage = leakSimpleName
+ " leak from "
+ rootSimpleName
+ " (holder="
+ firstElement.holder
+ ", type="
+ firstElement.type
+ ")";
RuntimeException exception = new RuntimeException(exceptionMessage);
StackTraceElement[] stackTrace = new StackTraceElement[leakTrace.elements.size()];
int i = 0;
for (LeakTraceElement element : leakTrace.elements) {
String methodName = element.referenceName != null ? element.referenceName : "leaking";
String file = classSimpleName(element.className) + ".java";
stackTrace[i] = new StackTraceElement(element.className, methodName, file, 42);
i++;
}
exception.setStackTrace(stackTrace);
return exception;
}
Самое большое различие между 1,6 и 2 состоит в том, что результат анализа, в котором использовалась одна трассировка утечки (=>, преобразуется в одну stacktrace), но теперь LeakCanary может находить много утечек одновременно, поэтому в результате анализа будет несколько утечек, вам нужно будет создать трассировку стека для каждого.