AFAIK Нет способа получить трассировку стека в виде строкового значения, если только конкретная платформа не предоставляет средства для переопределения потока System.err по умолчанию. На платформе BlackBerry он выбрасывает трассировку стека на catch(Exception)
для экономии памяти, однако на catch(Throwable)
этого не делает и предоставляет доступ к трассировке стека через журнал событий устройства.
В конечном итоге я поймал Throwable, а не Exception в последний момент и напечатал оттуда трассировку стека. Это, конечно, есть опасность того, что вы также поймаете java.lang.Error
, что не очень хорошо, особенно если это OutOfMemoryError
, хотя вызов System.gc()
перед печатью трассировки стека, кажется, снижает риск, и мы с ним не было никаких проблем.
Я бы посмотрел на любую платформу, на которую вы нацелены, и посмотрю, предоставляют ли они где-нибудь доступ к System.err. Вы всегда можете подключить отладчик, и он должен появиться на выходе консоли, хотя звучит так, как будто вы получаете трассировки стека «в поле».