标签: stack-trace

什么是PurpleEventCallback?

在我的iPhone应用程序的堆栈跟踪中,我看到一个叫做调用的东西PurpleEventCallback.我无法找到任何文件.这是什么?

PurpleEventCallback

iphone xcode stack-trace ios

52
推荐指数
2
解决办法
2711
查看次数

是否可以使用.NET异步方法获得良好的堆栈跟踪?

我在WebApi应用程序中设置了以下示例代码:

[HttpGet]
public double GetValueAction()
{
    return this.GetValue().Result;
}

public async Task<double> GetValue()
{
    return await this.GetValue2().ConfigureAwait(false);
}

public async Task<double> GetValue2()
{
    throw new InvalidOperationException("Couldn't get value!");
}
Run Code Online (Sandbox Code Playgroud)

可悲的是,当GetValueAction被击中时,返回的堆栈跟踪是:

    " at MyProject.Controllers.ValuesController.<GetValue2>d__3.MoveNext() in c:\dev\MyProject\MyProject\Controllers\ValuesController.cs:line 61 --- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at MyProject.Controllers.ValuesController.<GetValue>d__0.MoveNext() in c:\dev\MyProject\MyProject\Controllers\ValuesController.cs:line 56"
Run Code Online (Sandbox Code Playgroud)

因此,我在跟踪中得到(损坏)GetValue2和GetValue,但没有提到GetValueAction.难道我做错了什么?是否有另一种模式可以让我获得更完整的堆栈跟踪?

编辑:我的目标不是编写依赖于堆栈跟踪的代码,而是使异步方法中的失败更容易调试.

c# stack-trace async-await asp.net-web-api

52
推荐指数
3
解决办法
1万
查看次数

从C#打印堆栈跟踪信息

作为我们产品中某些错误处理的一部分,我们想要转储一些堆栈跟踪信息.但是,我们遇到许多用户只需截取错误消息对话框的屏幕截图,而不是向我们发送程序中可用的完整报告的副本,因此我想在此对话框中提供一些最小的堆栈跟踪信息.

我机器上的.NET堆栈跟踪如下所示:

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize)
at System.IO.StreamReader..ctor(String path)
at LVKWinFormsSandbox.MainForm.button1_Click(Object sender, EventArgs e) in C:\Dev\VS.NET\Gatsoft\LVKWinFormsSandbox\MainForm.cs:line 36
Run Code Online (Sandbox Code Playgroud)

我有这个问题:

格式看起来是这样的:

at <class/method> [in file:line ##]
Run Code Online (Sandbox Code Playgroud)

但是,atin关键字,我认为如果它们运行,比如挪威的.NET运行时而不是我安装的英文版,它们将被本地化.

有没有办法让我以语言中立的方式分离这个堆栈跟踪,这样我才能显示那些有这个条目的文件和行号?

换句话说,我想从上面的文字中获得这些信息:

C:\Dev\VS.NET\Gatsoft\LVKWinFormsSandbox\MainForm.cs:line 36
Run Code Online (Sandbox Code Playgroud)

您提供的任何建议都会有所帮助.

c# error-handling parsing stack-trace

51
推荐指数
4
解决办法
5万
查看次数

异常堆栈跟踪中的(未知源)

背景

这个问题与 为什么String.valueOf(null)抛出NullPointerException有关?

请考虑以下代码段:

public class StringValueOfNull {
    public static void main(String[] args) {
        String.valueOf(null);

        // programmer intention is to invoke valueOf(Object), but instead
        // code invokes valueOf(char[]) and throws NullPointerException
    }
}
Run Code Online (Sandbox Code Playgroud)

正如在链接问题的答案中所解释的那样,Java的方法重载将上面的调用解析为String.valueOf(char[]),这NullPointerException在运行时是正确的.

在Eclipse中编译javac 1.6.0_17,这是堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException
        at java.lang.String.<init>(Unknown Source)
        at java.lang.String.valueOf(Unknown Source)
        at StringValueOfNull.main(StringValueOfNull.java:3)
Run Code Online (Sandbox Code Playgroud)

需要注意的是堆栈跟踪上面缺少关键信息:它具备的完整签名valueOf法!它只是说String.valueOf(Unknown Source)!

在我遇到的大多数情况下,异常堆栈跟踪总是具有实际位于堆栈跟踪中的方法的完整签名,这当然对于立即识别问题非常有用,并且是堆栈跟踪的主要原因(不需要首先说是建造相当昂贵的.

然而,在这种情况下,堆栈跟踪根本没有帮助.它在帮助程序员识别问题方面失败了.

按原样,我可以看到程序员可以使用以上代码段识别问题的3种方法:

  • 程序员自己意识到方法是重载的,并且通过解析规则,在这种情况下调用"错误的"重载
  • 程序员使用一个好的IDE,允许他/她快速查看选择的方法
    • 例如,在Eclipse中,鼠标悬停在上面的表达式上会很快告诉程序员String valueOf(char[] data)确实是选中的那个
  • 程序员检查字节码(呃!) …

java exception stack-trace

51
推荐指数
3
解决办法
8万
查看次数

我可以在PowerShell中获得详细的异常堆栈跟踪吗?

运行这样的脚本:

 1: function foo()
 2: {
 3:    bar
 4: }
 5: 
 6: function bar()
 7: {
 8:     throw "test"
 9: }
10: 
11: foo
Run Code Online (Sandbox Code Playgroud)

我知道了

test
At C:\test.ps1:8 char:10
Run Code Online (Sandbox Code Playgroud)

我可以获得详细的堆栈跟踪吗?

At bar() in C:\test.ps1:8
At foo() in C:\test.ps1:3 
At C:\test.ps1:11
Run Code Online (Sandbox Code Playgroud)

powershell exception stack-trace

49
推荐指数
5
解决办法
4万
查看次数

我怎样才能让PHP在出错时产生回溯?

尝试使用其默认的当前行错误消息来调试PHP是非常糟糕的.如何在生成错误时让PHP生成回溯(堆栈跟踪)?

php debugging error-handling stack-trace backtrace

49
推荐指数
4
解决办法
6万
查看次数

e.printStackTrace(); 在字符串中

e.printStackTrace()打印异常错误的方法,所以我想把整个例外用于String显示它Toast.makeText()
如何做到这一点?
如果有更多的替代想法,请与我分享或建议我.

java android stack-trace

48
推荐指数
3
解决办法
4万
查看次数

Java中没有堆栈跟踪的异常

这可能是一个非常天真的问题.

我曾经认为a Throwablein Java 总是包含堆栈跟踪.这是对的吗?现在看起来我exceptions 没有堆栈跟踪就抓住了.是否有意义?是否有可能在没有堆栈跟踪的情况下捕获异常?

java exception stack-trace

46
推荐指数
4
解决办法
4万
查看次数

确定当前调用堆栈(用于诊断目的)

出于诊断目的,我有时需要存储导致给定状态转换的调用堆栈(例如授予锁定,提交事务等),以便稍后出现问题时我可以找出最初触发状态转换的人.

目前,我知道检索调用堆栈的唯一方法看起来像下面的代码片段,我认为非常难看:

StackTraceElement[] cause;
try {
  throw new Exception();
} catch (Exception e) {
  cause = e.getStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

有人知道更好的方法吗?

java stack-trace

45
推荐指数
2
解决办法
2万
查看次数

在记录器中获取堆栈跟踪

我正在使用log4j来记录我的异常.我想记录我得到的任何内容e.printStackTrace();
我的代码如下所示:

try {

} catch(Exception e) {
    log.error("Exception is:::" + e);
}
Run Code Online (Sandbox Code Playgroud)

但我记录的内容如下所示:

2012-02-02 12:47:03,227 ERROR [com.api.bg.sample] - Exception in unTech:::[Ljava.lang.StackTraceElement;@6ed322
2012-02-02 12:47:03,309 ERROR [com.api.bg.sample] - Exception is :::java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
Run Code Online (Sandbox Code Playgroud)

但我期望的内容是:

java.io.IOException: Not in GZIP format
at java.util.zip.GZIPInputStream.readHeader(Unknown Source)
at java.util.zip.GZIPInputStream.<init>(Unknown Source)
at java.util.zip.GZIPInputStream.<init>(Unknown Source)
at com.api.bg.sample.unGZIP(sample.java:191)
at com.api.bg.sample.main(sample.java:69)
Run Code Online (Sandbox Code Playgroud)

我尝试过e.getMessage(),e.getStackTrace();但是我没有得到完整的堆栈跟踪.有什么建议?

java log4j stack-trace

44
推荐指数
2
解决办法
6万
查看次数