鉴于此堆栈跟踪代码段
引起:java.net.SocketException:软件导致连接中止:
java.net.SocketOutputStream.socketWrite0(本机方法)中的套接字写入错误
我试着回答以下问题:
关于#1:
Sun的JVM源代码不包含这个确切的消息,但我认为文本软件导致连接中止:套接字写入错误来自本机实现SocketOutputStream:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Run Code Online (Sandbox Code Playgroud)
关于#2
我的猜测是,它是在客户端终止连接之前,在获得完整响应之前引起的(例如,发送请求,但在获得完整响应之前,它已关闭/终止/脱机)
问题:
我需要证明这个堆栈跟踪是套接字客户端的"错误",并且服务器没有做任何事情来避免它.(除了捕获异常,或使用非Sun JVM SocketOutputStream,但两者都没有真正避免客户端终止的事实)
假如您执行e.printStackTrace(),则会捕获异常并在标准输出(例如,控制台)上获取以下内容:
java.io.FileNotFoundException: so.txt
at java.io.FileInputStream.<init>(FileInputStream.java)
at ExTest.readMyFile(ExTest.java:19)
at ExTest.main(ExTest.java:7)
Run Code Online (Sandbox Code Playgroud)
现在我想把它发送到一个记录器,比如log4j,以获得以下内容:
31947 [AWT-EventQueue-0] ERROR Java.io.FileNotFoundException: so.txt
32204 [AWT-EventQueue-0] ERROR at java.io.FileInputStream.<init>(FileInputStream.java)
32235 [AWT-EventQueue-0] ERROR at ExTest.readMyFile(ExTest.java:19)
32370 [AWT-EventQueue-0] ERROR at ExTest.main(ExTest.java:7)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
try {
...
} catch (Exception e) {
final String s;
... // <-- What goes here?
log.error( s );
}
Run Code Online (Sandbox Code Playgroud) 我正在考虑为我的Java应用程序创建一个调试工具.
我想知道是否有可能获得堆栈跟踪,就像Exception.printStackTrace()没有实际抛出异常一样?
我的目标是,在任何给定的方法中,转储堆栈以查看方法调用者是谁.
在Javascript中,假设我想在异常发生时执行一些清理,但让异常继续向上传播,例如:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
Run Code Online (Sandbox Code Playgroud)
这段代码的问题在于捕获和重新抛出异常会导致到那一点的堆栈跟踪信息丢失,因此如果随后再次捕获异常,堆栈上的堆栈更高,堆栈跟踪只会下降到re -扔.这很糟糕,因为它意味着它不包含实际抛出异常的函数.
事实证明,try..finally具有相同的行为,至少在Chrome中(也就是说,它不是精确地重新抛出问题,而是存在任何异常处理程序块.)
有没有人知道在Javascript中重新抛出异常但保留与之关联的堆栈跟踪的方法?如果不这样做,那么建议其他方法来添加异常安全的清理处理程序,同时在发生异常时捕获完整的堆栈跟踪?
感谢任何指针:)
javascript callstack exception-handling exception stack-trace
有没有办法在发布模式下显示.NET程序集构建/部署的堆栈跟踪中的行?
更新:
我的应用程序分为三个类库项目和一个ASP.NET"网站"项目.我试图追踪的错误是在三个类库项目之一.我只为生成"未设置为对象实例的对象引用"错误的类库项目部署了pdb文件.
行号仍未显示在堆栈跟踪中.我是否需要为所有项目部署pdb文件以获取堆栈跟踪中的行号?
工作方案
为每个应用程序部署pdb文件修复了行号问题.
我试图在控制台输出中调查项目构建错误,如下所示:
:myapp:processDebugResources FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugResources'.
...
...
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Run Code Online (Sandbox Code Playgroud)
我怀疑它与资源未找到错误有关.我的问题是,在IDE级别,我如何添加--stacktrace或--debug选项,以便它可以为我调试生成更多信息?
我想在Rails 3应用程序中记录当前的回溯(stacktrace)而不会发生异常.知道怎么样?
我为什么要这个?我正在尝试跟踪Rails查找模板时所做的调用,以便我可以选择要覆盖的进程的一部分(因为我想更改我的特定子类控制器的视图路径).
我想从文件中调用它:gems\actionpack-3.2.3\lib\action_dispatch\middleware\templates\rescues\missing_template.erb.我知道这不是最佳实践,但我知道它是堆栈的下游,从那里搜索模板.
在Android(Java)中,如何打印出完整的堆栈跟踪?如果我的应用程序从nullPointerException或其他东西崩溃,它会打印出一个(几乎)完整的堆栈跟踪,如下所示:
java.io.IOException: Attempted read from closed stream.
com.android.music.sync.common.SoftSyncException: java.io.IOException: Attempted read from closed stream.
at com.android.music.sync.google.MusicSyncAdapter.getChangesFromServerAsDom(MusicSyncAdapter.java:545)
at com.android.music.sync.google.MusicSyncAdapter.fetchDataFromServer(MusicSyncAdapter.java:488)
at com.android.music.sync.common.AbstractSyncAdapter.download(AbstractSyncAdapter.java:417)
at com.android.music.sync.common.AbstractSyncAdapter.innerPerformSync(AbstractSyncAdapter.java:313)
at com.android.music.sync.common.AbstractSyncAdapter.onPerformLoggedSync(AbstractSyncAdapter.java:243)
at com.google.android.common.LoggingThreadedSyncAdapter.onPerformSync(LoggingThreadedSyncAdapter.java:33)
at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:164)
Caused by: java.io.IOException: Attempted read from closed stream.
at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:148)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:159)
at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:212)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:64)
at android.net.http.AndroidHttpClient.getUngzippedContent(AndroidHttpClient.java:218)
at com.android.music.sync.api.MusicApiClientImpl.createAndExecuteMethod(MusicApiClientImpl.java:312)
at com.android.music.sync.api.MusicApiClientImpl.getItems(MusicApiClientImpl.java:588)
at com.android.music.sync.api.MusicApiClientImpl.getTracks(MusicApiClientImpl.java:638)
at com.android.music.sync.google.MusicSyncAdapter.getChangesFromServerAsDom(MusicSyncAdapter.java:512)
... 6 more
Run Code Online (Sandbox Code Playgroud)
但有时,出于调试目的,我想从代码中的位置记录完整的堆栈跟踪.我想我可以这样做:
StackTraceElement trace = new Exception().getStackTrace();
Log.d("myapp", trace.toString());
Run Code Online (Sandbox Code Playgroud)
但是这只是打印出指向对象的指针......我是否必须遍历所有堆栈跟踪元素才能将它们打印出来?或者有一种简单的方法可以将它全部打印出来吗?
例如,在一个地方......
//---------------a
try
{
// some network call
}
catch(WebException we)
{
throw new MyCustomException("some message ....", we);
}
Run Code Online (Sandbox Code Playgroud)
......在另一个地方......
//--------------b
try
{
// invoke code above
}
catch(MyCustomException we)
{
Debug.Writeline(we.stacktrace); // <----------------
}
Run Code Online (Sandbox Code Playgroud)
我打印的堆栈跟踪,它只从a到b开始,它不包含WebException的内部堆栈跟踪.
如何打印所有堆栈跟踪???
这是我遇到的一个奇怪的崩溃.当我按下一个转到某个ViewController的按钮时发生崩溃.它崩溃的线是:
DestinationInformationViewController *info = [[DestinationInformationViewController alloc] init];
[info setModalTransitionStyle: UIModalTransitionStyleCrossDissolve];
[self presentViewController:info animated:YES completion: nil]; // CRASHES HERE
[info release];
Run Code Online (Sandbox Code Playgroud)
崩溃跟踪是:
*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint'
*** First throw call stack:
(0x3758288f 0x35287259 0x37582789 0x375827ab 0x3153d54d 0x3153d6bb 0x3153d423 0x314ce001 0x3143c3c7 0x31319c59 0x3128fc17 0x3129a267 0x3129a1d5 0x3133959b 0x31338367 0x84091 0x374dc3fd 0x31271e07 0x31271dc3 0x31271da1 0x31271b11 0x31272449 0x3127092b 0x31270319 0x31256695 0x31255f3b 0x33c9822b 0x37556523 0x375564c5 0x37555313 0x374d84a5 0x374d836d 0x33c97439 0x31284cd5 0x82bb3 0x71200)
terminate called throwing …
stack-trace ×10
exception ×4
java ×4
android ×2
c# ×2
logging ×2
.net ×1
callstack ×1
crash ×1
debugging ×1
ios ×1
javascript ×1
line-numbers ×1
log4j ×1
objective-c ×1
ruby ×1
sockets ×1
stack ×1
tomcat ×1
xcode ×1