Tag: stack trace

使用.NETasynchronous方法可以获得一个好的堆栈跟踪吗?

我在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!"); } 不幸的是,当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) […]

e.printStackTrace(); 在string中

有e.printStackTrace()方法来打印exception的错误,所以我想在String取整个exception,并通过Toast.makeText() 我怎样才能做到这一点? 如果有更多的替代想法,那么请与我分享或build议我。

没有debugging代理,NullPointerException堆栈跟踪不可用

我最近发现了一个导致NullPointerException的bug。 使用标准的slf4j语句捕获并loggingexception。 以下摘录代码: for(Action action : actions.getActions()) { try { context = action.execute(context); } catch (Exception e) { logger.error("…", e); break; } } 正如你所看到的,没有什么幻想。 但是,在我们所有的exception日志语句中,只有这个不打印堆栈跟踪。 所有它打印的是消息(表示为“…”)和exception类的名称(java.lang.NullPointerException)。 由于exception的堆栈跟踪是懒加载的,我想也许有一种指令重新sorting的问题,并决定在日志语句之前调用e.getStackTrace()。 这没有什么区别。 所以我决定重新启动debugging代理。 但是,因为我甚至连接到进程,我注意到现在堆栈跟踪正在打印。 所以很显然,debugging代理的存在会导致一些额外的debugging信息变得可用。 我从那以后解决了exception的根本原因。 但我想知道为什么没有debugging器的堆栈跟踪是不可用的。 有人知道吗? 澄清: 这不是一个日志logging问题 。 想象一下同样的try / catch子句,但在catch中,我打印出下面的值: e.getStackTrace().length 没有debugging器打印“0”,用debugging器打印一个正数(在这种情况下是9)。 更多信息:这发生在JDK 1.6.0_13,64位,amd64,linux 2.6.9上

堆栈跟踪与asynchronous/等待

很明显为什么堆栈跟踪会受到微软新的编程模式的影响。 我们现在有一个语义堆栈和一些物理的(我select的话)。 我看到的是一个exception的StackTrace属性(在debugging器中)是物理的,连接在一起: private async Task CheckFooAndBar() { var log = LogManager.GetLogger("Test"); log.Info("CheckFooAndBar"); try { await Foo(); } catch (Exception ex) { log.Info("StackTrace of last exception: " + ex.StackTrace); } Console.ReadKey(); } private async Task Foo() { await Task.Factory.StartNew(() => Thread.Sleep(1000)); await Bar(); await Task.Factory.StartNew(() => Thread.Sleep(1000)); } private async Task Bar() { await Task.Factory.StartNew(() […]

在“释放”模式下的“堆栈跟踪”中显示.NET程序集的行号

有没有办法显示堆栈跟踪中的.NET程序集版本/部署在发行模式? 更新: 我的应用程序分为三个类库项目和一个ASP.NET“网站”项目。 我试图追查的错误是三个类库项目之一。 我只部署了生成“对象引用未设置为对象实例”错误的类库项目的pdb文件。 行号仍未显示在堆栈跟踪中。 我是否需要为所有项目部署pdb文件以获取堆栈跟踪中的行号? 工作解决scheme 为每个应用程序部署pdb文件修复了行号问题。

激活堆栈仅适用于提供者中的某些特定的ETW任务?

从Windows 7开始,可以激活用户模式事件的调用堆栈 。 这可以正常工作,但是有时在一个提供程序中为所有任务/事件激活堆栈是不需要的,只需要为某些特定的任务激活堆栈就好了。 这可能吗?

如何在.NET中打印当前的堆栈跟踪,没有任何exception?

我有一个常规的C#代码。 我没有例外 。 我想以编程方式logging当前堆栈跟踪以进行debugging。 例: public void executeMethod() { logStackTrace(); method(); }

如何从程序中调用gdb来打印它的堆栈跟踪?

现在我正在使用这样的function: #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> #include <unistd.h> void print_trace() { char pid_buf[30]; sprintf(pid_buf, "–pid=%d", getpid()); char name_buf[512]; name_buf[readlink("/proc/self/exe", name_buf, 511)]=0; int child_pid = fork(); if (!child_pid) { dup2(2,1); // redirect output to stderr fprintf(stdout,"stack trace for %s pid=%s\n",name_buf,pid_buf); execlp("gdb", "gdb", "–batch", "-n", "-ex", "thread", "-ex", "bt", name_buf, pid_buf, NULL); abort(); /* If gdb […]

如何从我的Android应用程序获取崩溃数据?

如何从我的Android应用程序获取崩溃数据(至less是堆栈跟踪)? 至less在用自己的设备进行工作的时候,最好是从我的应用程序的任何实例上运行,这样我就可以改进它,使它更加稳定。

如何在我的gcc C ++应用程序崩溃时生成堆栈跟踪

当我的c + +应用程序崩溃,我想生成一个堆栈跟踪。 我已经问过这个,但我想我需要澄清我的需求。 我的应用程序由许多不同的用户运行,它也运行在Linux,Windows和Macintosh上(所有版本都使用gcc编译)。 我希望我的程序能够在崩溃时生成堆栈跟踪,下次用户运行它时,会询问是否可以将堆栈跟踪发送给我,以便我可以跟踪这个问题。 我可以处理发送信息给我,但我不知道如何生成跟踪string。 有任何想法吗?