Tag: 堆栈跟踪

从堆栈中的类获取generics参数

我有一个名为Repository的generics类。 该类有一个函数,通过使用不同的generics参数初始化Repository类的新实例来“调用自身”。 这个“递归”可以继续 – 所以为了避免StackOverflowException,我需要检查堆栈中是否存在一个从Repository类调用的具有相同generics参数的方法。 这是我的代码: StackTrace stack = new StackTrace(); StackFrame[] frames = stack.GetFrames(); foreach (StackFrame frame in frames) { Type callingMethodClassType = frame.GetMethod().DeclaringType; if (callingMethodClassType.IsGenericType) { // BUG HERE in getting generic arguments of the class in stack Type genericType = callingMethodClassType.GetGenericArguments()[0]; if (genericType.Equals(entityType)) { wasAlready = true; break; } } } generics类型始终返回为T而不是正确的类型,如“User”或“Employee”(例如)。 […]

exception会在try / catch上下文中丢失部分堆栈跟踪

我有两个例子。 在第一种情况下,调试器捕获未处理的exception: static void Main(string[] args) { Exec(); } static void Exec() { throw new Exception(); } 并且exception具有完整的堆栈跟踪: at ConsoleApplication28.Program.Exec() at ConsoleApplication28.Program.Main(String[] args) at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object […]

正确使用stacktrace进行调试

以下代码行导致我出现exception plug.Instance.AddDocuments(new Int32[] { val_pid }, val_ptype, val_doccat, val_subcat, val_doctype, val_notes, val_summary, SummaryAppendOptions.None, val_docStatus, new String[] { PDFFile }) 这是一个例外细节。 System.Exception was caught Message=Object reference not set to an instance of an object. – Error when trying to save document Source=SimsBridge StackTrace: at SimsBridge.Bridge.AddDocuments(Int32[] personIds, Int32 PersonType, String docCatagory, Int32 subCatagory, String docType, String notes, […]

获取第一次机会exception的行号

我从某个地方抛出了exception,但是我从编译器得到的只是“mscorlib.dll中出现类型’System.ArgumentOutOfRangeException’的第一次机会exception”。 这对我来说没用,因为那不是我的代码(很确定它是默认库)。 我想看到堆栈跟踪或其他什么,所以我知道在我的代码中出错的地方。 它是一个相当大的代码库(其中大部分都不是我的),而且还有很多multithreading和其他东西正在进行中,因此几乎不可能尝试逐步完成代码而不知道从哪里开始查找。 是否有某些设置可以使所有exception触发中断,因此我可以在调用堆栈出现时看到它们,而不是仅仅让它们在输出中以无效的错误消息无声地失败?

如何在WPF中显示未处理exception的堆栈跟踪报告

我使用此EventHandler来捕获所有未处理的exception。 public App() : base() { this.Dispatcher.UnhandledException += OnDispatcherUnhandledException; } void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { … } 我想显示该示例的堆栈跟踪(错误消息除外),如下图所示: 我怎样才能做到这一点?

获取try..catch中的Exception对象以包含FULL stacktrace,当前它被截断

有人可以帮忙吗? 我试图在try..catch的捕获中获得完整的堆栈跟踪。 目前它被截断为仅包含错误所在的当前方法…. 让我解释..目前我的堆栈跟踪包括方法“第三”,其中错误发生但第一和第二不包括在内,我相信这是设计的。 private void First() { this.Second(); } private void Second() { this.Third(); } private void Third() { try { throw new SystemException(“ERROR HERE!”); } catch (Exception ex) { // I WILL LOG THE EXCEPTION object “EX” here ! but ex.StackTrace is truncated! } } 我已经看到了在STRING中获得完整堆栈跟踪的一些技巧,但问题是我的日志框架需要一个类型为“Exception”的对象,但是我的exception的变量(ex)是有效的但是属性StackTrace被截断了。 无论如何我有一个完整的堆栈跟踪可以收到一个完整的exception,所以我仍然可以发送我的“EX”,但这次它将有一个UNtruncated堆栈跟踪。 UnhandledErrror事件似乎工作就好像我到达这里Exception有一个堆栈跟踪并完全填充… 我真的很感激任何反馈..

有没有办法告诉调用c#函数的方法的参数?

我正在为我的c#应用程序开发一个免提日志机制。 这是我想要的样子: 函数a(arg1, arg2, arg 3…..)调用函数b(arg4,arg5,arg6….) ,后者又调用log() ,它能够检测b(arg4,arg5,arg6….) (这可以完成)通过Environment.StackTrace )以及调用stacktrace中每个函数(例如a和b )的值。 我希望它在调试和发布模式下工作(或者至少在调试模式下)。 这可以在.net中做吗?

我可以在c#app中获取所有线程的堆栈跟踪吗?

我正在调试一个明显的并发问题,这个问题是我在工作中遇到的一个大问题。 有问题的错误仅在运行了许多(12+)小时后出现在某些性能较低的机器上,我从未在调试器中重现它。 因此,我的调试工具基本上只限于分析日志文件。 C#可以很容易地获得抛出exception的线程的堆栈跟踪,但是我还想在抛出exception时另外获取当前在我的AppDomain中执行的每个其他线程的堆栈跟踪。 这可能吗?

如何在不重置堆栈跟踪的情况下抛出exception?

这是一个后续问题, “throw”和“throw ex”之间有区别吗? 有没有办法提取新的error handling方法而不重置堆栈跟踪? [编辑]我将尝试“内部方法”和Earwicker提供的另一个答案 ,看看哪个可以更好地标记答案。

如何在保持到目前为止生成的堆栈跟踪的同时重新抛出内部exception?

重复: 在C#中,如何在不丢失堆栈跟踪的情况下重新抛出InnerException? 我有一些操作,我在后台线程上异步调用。 有时,事情变坏了。 当发生这种情况时,我倾向于得到一个TargetInvocationException,这在适当的时候是非常无用的。 我真正需要的是TargetInvocationException的InnerException,如下所示: try { ReturnValue = myFunctionCall.Invoke(Target, Parameters); } catch (TargetInvocationException err) { throw err.InnerException; } 这样,我的调用者就会遇到发生的REALexception。 问题是,throw语句似乎重置了堆栈跟踪。 我想基本上重新抛出内部exception,但保留它最初的堆栈跟踪。 我怎么做? 澄清:我只想要内部exception的原因是这个类试图“抽象掉”这些函数(调用者提供的委托)在其他线程上运行的全部事实。 如果存在exception,则可能与在后台线程上运行无关,并且调用者真的喜欢进入其委托的堆栈跟踪并找到真正的问题,而不是我调用的调用。