Swift 4 через расширение, обрабатывает пустой вид таблицы:
extension UITableView {
func scrollToTop(animated: Bool) {
self.setContentOffset(CGPoint.zero, animated: animated);
}
}
Возможно ли, что этот код находится во внутреннем цикле? Затем JIT-компилятор может компилировать стек вызовов для этого в собственный код, теряя информацию о стеке. Затем, когда вы присоединяете отладчик, он отключает JIT, снова делая информацию доступной.
Другие ручные исключения продолжают отображать информацию, поскольку JIT не оптимизирует.
Похоже, что это иногда может случиться с другими из комментария в исходном коде этого класса в строке 102:
http://logging.apache.org/log4j/1.2/xref/org/apache/log4j/spi/LocationInfo.html
Я могу воспроизвести это, но кажется странным, что это происходит где-то в вашем действии.
Если вы вызовете setStackTrace с пустым массивом, будет показан только текст.
public class Fark {
public static void main(String[] args) {
try {
Fark.throwMe(args.length != 0);
}
catch (Exception e) {
e.printStackTrace();
}
}
public static final void throwMe(boolean arg) throws Exception{
Exception e = new NullPointerException();
if (arg) {
e.setStackTrace(new StackTraceElement[0]);
}
throw e;
}
}
Запуск ....
% java Fark
java.lang.NullPointerException
at Fark.throwMe(Fark.java:15)
at Fark.main(Fark.java:5)
% java Fark nothing
java.lang.NullPointerException
С флагом JVM -XX: -OMITSTACTTRACEINSTTROW вы можете отключить оптимизацию производительности JVM для этого случая использования. Если этот параметр дан, который отключает флаг, Stacktrace будет доступен.
Для получения дополнительной информации, пожалуйста, ознакомьтесь с следующими заметками выпуска:
«Компилятор на сервере VM теперь предоставляет правильные задние задницы для всех« холодных »встроенных исключений. Для целей производительности, когда такое исключение Обрасывает несколько раз, метод может быть перекомпилирован. После перекомпиляции компилятор может выбрать более быструю тактику с использованием предварительно отключения исключений, которые не обеспечивают трассировку стека. Чтобы полностью отключить использование предварительных исключений, используйте этот новый флаг: -xx: - Omitstacktraceinstthrow. " http://java.sun.com/j2se/1.5.0/relnotes.html