相关疑难解决方法(0)

以编程方式获取C#Stack Trace

可能重复:
如何在.NET中打印当前的堆栈跟踪,没有任何异常?

抛出异常时,其文本包含堆栈跟踪.我可以以某种方式获得堆栈跟踪文本(包括文件和行)没有例外吗?

public void f()
{
   //blah
   string stacktrace = ???;
   //blah
}
Run Code Online (Sandbox Code Playgroud)

.net c# stack-trace

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

如何获取非当前线程的堆栈跟踪?

可以使用System.Diagnostics.StackTrace获取堆栈跟踪,但必须暂停线程.暂停和恢复功能已经过时,所以我希望存在更好的方法.

.net debugging multithreading stack-trace visual-studio-debugging

31
推荐指数
5
解决办法
1万
查看次数

将StackTrace附加到异常而不在C#/ .NET中抛出

我有一个使用返回值处理错误的组件,而不是标准的异常处理.除了错误代码之外,它还返回错误发生位置的堆栈跟踪.我用来调用组件的包装器将解释返回代码并抛出异常.

我想让包装器抛出一个异常,其中包含从组件中捕获的堆栈跟踪信息.我希望它看起来好像异常是从错误的原始站点抛出的,即使它被抛到其他地方.更具体地说,id类似于visual studio测试运行器显示的堆栈跟踪,以反映正确的位置

有没有办法做到这一点?如果我可以避免访问私人成员的低级反射技巧,那也很好,但我会采取我能得到的.

编辑1: 我不关心如何捕获堆栈跟踪,我关心的是将已经捕获的堆栈跟踪附加到异常

编辑2:

我尝试重写StackTrace属性,但是visual studio正在从其他地方提取堆栈跟踪数据,并且似乎完全忽略了被覆盖的属性

    CustomException GenerateExcpetion()
    {
        return new CustomException();
    }
    void ThrowException(Exception ex)
    {
        Trace.WriteLine("Displaying Exception");
        Trace.WriteLine(ex.ToString());
        var edi = ExceptionDispatchInfo.Capture(ex);
        edi.Throw();
    }
    [TestMethod]
    public void Test006()
    {
        var ex = GenerateExcpetion();
        ThrowException(ex);
    }
    public class CustomException : Exception
    {
        string _stackTrace;
        public CustomException()
        {
            _stackTrace = Environment.StackTrace;
        }

        public override string StackTrace
        {
            get
            {
                return base.StackTrace;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Excpetion.ToString()方法从私有属性中提取堆栈跟踪数据,因此来自覆盖的堆栈跟踪不会显示.

CustomException:抛出了类型'CustomException'的异常.

ExceptionDispatchInfo也从私有属性中查找堆栈跟踪数据,因此它无法找到任何该数据,并且当您抛出此自定义异常时,新的堆栈跟踪将附加到该异常,其位置为抛出.如果直接使用throw,则私有堆栈信息将设置为发生抛出的位置.

.net c#

21
推荐指数
5
解决办法
1万
查看次数

检查异常的优缺点是什么?

您是否更喜欢在Java中检查异常处理或在C#中未经检查的异常处理以及为什么?

c# java exception

11
推荐指数
5
解决办法
3044
查看次数

获得Stacktrace

当Exception发生时,您可以打印出StackTrace并查看它.

如果你想在没有异常的情况下获得StackTrace怎么办?

有没有办法做到这一点?

c# debugging stack-trace printstacktrace

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

获取当前呼叫堆栈

是否有可能在Windows应用商店中获取当前的调用堆栈,而不会抛出异常?

我找到了这个答案,但它不适用于Windows应用商店.

为什么我需要这个

我需要得到调用堆栈,因为我有一个DirectX纹理内存泄漏.

我想在分配它时将调用堆栈附加到我的纹理.在一些程序使用之后,我打印了尚未解除分配的所有纹理的callstack.

应该很容易看到我忘记取消分配纹理的位置.

c# callstack windows-8 windows-runtime windows-store-apps

1
推荐指数
1
解决办法
1895
查看次数

想要将StackTrace打印到txt文件中C#

我希望能够将c#中的堆栈跟踪打印到txt文件中,如下所述.请注意以下内容:

  1. 我知道Ex.Message不会得到堆栈跟踪.我想使用FileHandler将StackTrace消息写入文本文件.
  2. FileHandler类内部代码并不重要.我想知道如何获取此处捕获的异常的堆栈跟踪.

    try
    
    {
    
    //some code
    
    }
    
    // I just inherit from exception class (the message member, nothing big here)
    
    catch (CustomException ex) 
    {
    
    //I want to write the stacktrace here instead of the ex.Message
    
    FileHandler.Write("DeveloperErrors.txt", "Stack Trace" + ex.Message, System.IO.FileMode.Append);
    }
    
    Run Code Online (Sandbox Code Playgroud)

c# stack-trace file-handling

-2
推荐指数
1
解决办法
2269
查看次数