通过API获得TFS中失败的TestCaseResult的StackTrace。
iTestCaseresult 具有属性" errormessage " errormessage 属性的最大大小为527 bytes,这不足以存储重量的异常结构,不幸的是,似乎没有适当的例外属性来存储一个. 我的问题是,当测试失败时,如何获得stacktrace?我知道它可用,因为GUI可以在Visual Studio中将其拉到 ,您可以看到与iTestCaseresult关联的错误剪切. (如果您使用浏览器放大,则图像会恢复其清晰度.) 我在 runinfo 对象中发现了可能的铅: 它具有适当的异常结构,并且似乎与运行相关联,但是我无法将 iTestCaseresult 和a runinfo 对象之间的点连接起来.我可能正在吠叫错误的树. 解决方案 我认为Visual Studio从TRX文件中获取此信息,该文件存储为测试运行的附件. 我得到的附件如下: TfsTeamProjectCollection tfsCol
12 2024-04-25
编程技术问答社区
如何在WPF中显示未处理异常的堆栈跟踪报告
i使用此事件Handler捕获所有未手持的异常. public App() : base() { this.Dispatcher.UnhandledException += OnDispatcherUnhandledException; } void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { ... } 我想像此图片一样显示exeption的堆栈跟踪(错误消息除外): 我该怎么做? 解决方案 我可能不了解这个问题,因为据我所知,这似乎是一个简单的问题. Exception类上有一个StackTrace属性.您可以从该属性中获取堆栈跟踪: private void OnDispatcherU
16 2024-04-24
编程技术问答社区
创建-react-app(开发模式)中最小化的组件堆栈跟踪
在开发中运行create-react-app 模式: 为什么我的控制台错误链接到缩小代码块?我以为我记得Cra能够显示源映射的文件. 解决方案 这是因为您使用的依赖项之一抛出了错误.安装软件包时,您会在Node_modules上获得缩小生产构建版本.我们可以从堆栈跟踪中看到该错误位于vendors~main.chunk.js 中.
22 2024-04-23
编程技术问答社区
如何从堆栈跟踪中获得行号?
我正在尝试从WP7应用程序中的堆栈跟踪中获取行号.我已经将调试信息设置为Full,并在调试配置中运行该应用程序,但是堆栈轨迹中没有行号.我怎样才能解决这个问题?我知道Bugsense,但不想使用它. 解决方案 不认为这是可能的,因为line number是指 code-file 内部的行数,该行与汇编后失去了与二进制文件的任何关系.这就是为什么我们使用PDB文件. 他们是"数据库",用于保持实际执行的代码与最终二进制状态之间的关系. 因此,不要以为在运行时可以获得line number. 但是,如果您有一个PDB上次编译的文件,则可以从 中获取这些信息 stackframe.getfilelinenumber : 获取包含代码的文件中的行号 执行.此信息通常是从调试中提取的 可执行文件的符号.
14 2024-04-22
编程技术问答社区
如何调试 C 共享库(用 Go 编写)--它在净调用时挂起
使用 http.post() GO代码.如果我构建exe,没关系.如果我构建c共享库 -buildMode = c-shared ,它将挂在https.post()上. 我已经尝试过 strace -fp pid : futex(0x7f618b2c1cd0, FUTEX_WAKE, 1) = 0 futex(0xc820022110, FUTEX_WAIT, 0, NULL 我尝试添加profiler: http.ListenAndServe("localhost:6060", nil) http.Post() 但同样它也挂在http. -post和profiler上也被阻止(这是在听,但没有从6060端口发出响应).我已经发送了sigquit信号 - 堆栈跟踪: SIGQUIT: quit PC=0x7f0cad5c9081 m=1 goroutine 0 [idle]: runtime.futex(0xc820022110, 0x0, 0x0
6 2024-04-22
编程技术问答社区
显示被重新抛出的异常的堆栈跟踪,而不是从抛出点开始的堆栈跟踪
我已经在VS2005中确认了同样的行为,所以我称其为.net(1.1)错误是错误的. 我要在下面留下最初的问题,但是我修订的问题是:我如何获得视觉工作室,以给我我在呼叫堆栈窗口中捕获和重新捕获的例外的堆栈踪迹,而不仅仅是从throw语句的点显示呼叫堆栈? 情况是我在运行时决定 是否全球异常处理程序打开或关闭 - 如果不关闭,我希望VS抓住异常,以便我可以浏览呼叫堆栈弄清楚什么问题. 以前,全局异常处理程序要么已编译为程序.但是情况发生了变化,现在我们需要在运行时做出决定 - 看起来我可能需要回到宏观的方式,但是没有宏: if (allow_bubble_up) { Foo(); } else { try { Foo(); } catch (Exception e) { GlobalExceptionHandler(e); } } 但是,这种方法感觉极度对我而言. 显然,
6 2024-04-21
编程技术问答社区
从堆栈中的一个类中获取通用参数
我有一个称为存储库的通用类.该类具有通过使用不同的通用参数初始化存储库类的新实例来"自称"的函数.此"递归"可以继续进行 - 因此,为避免stackoverflowException,我需要检查堆栈中是否存在,这是从存储库类中调用具有相同通用参数的方法. 这是我的代码: 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 arg
16 2024-04-21
编程技术问答社区
如何从Visual Studio插件中获得运行进程的堆栈跟踪?
我正在编写C#中的Visual Studio加载项,该加载项将在我在同一Visual Studio窗口中调试过程时运行,并且我需要访问该过程的堆栈跟踪来自我的加载项.我尝试将此代码放入加载项中,但它返回加载项的堆栈跟踪,而不是我正在调试的过程. System.Diagnostics.StackTrace stacktrace = new System.Diagnostics.StackTrace(true); System.Diagnostics.StackFrame stackframe = stacktrace.GetFrame(0); 任何帮助将不胜感激. 解决方案 最简单的方法是通过DTE自动化对象向调试器询问堆栈帧. DTE对象应通过您的加载项可用.您想要的属性是 static string GetCurrentStackTrace(DTE dte) { bool canGetStackTrace = (dte != null) && (dte.Debugge
26 2024-04-20
编程技术问答社区
异常在try/catch上下文中失去了部分堆栈轨迹
我有两个例子.在第一种情况下,调试器捕获了未手持的例外: static void Main(string[] args) { Exec(); } static void Exec() { throw new 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.Visual
12 2024-04-20
编程技术问答社区
是否有任何方法可以知道 C# 中调用函数的方法的参数?
我正在为我的C#应用​​程序开发可开关的日志机制. 这是我想要的样子: function a(arg1, arg2, arg 3.....)调用函数b(arg4,arg5,arg6....),又又调用log(),它比检测stacktrace(可以通过Environment.StackTrace完成)以及每个函数的值(例如a和b)在堆栈中称为. 我希望它能在调试和发布模式下工作(或者至少在调试模式下). . 这可以在.NET中进行? 解决方案 可能是不可能的: 到了时间b,b被称为arg1使用的堆栈中的空间(IL堆栈,所以它甚至从未放在堆栈中,但不能保证在呼叫上进行注册)仍然由arg1. 使用 通过扩展,如果arg1是参考类型,则不能保证不会收集垃圾的对象,如果在调用b> b的情况下未使用. 编辑: 更多的细节,因为您的评论表明您不是在说这个问题,但仍然认为应该可能. 规格中未针对任何相关标准指定抖动所使用的呼叫约定,这使实施者可以
6 2024-04-19
编程技术问答社区
为什么我的异常堆栈痕迹总是指向最后的方法行?
我的Visual Studio安装有问题.当我有例外时,我的堆栈跟踪中总是有不正确的行号.我的代码库中每种方法的最后一行总是有点.同时,当我使用调试器跟踪程序时,还可以. PDB发生了什么? 否,我不会在每种方法上重新投入异常. 在每行堆栈跟踪中,我都有最后一行的相应方法,而中间的语句则抛出了异常. 解决方案 听起来好像您正在以发布模式运行应用程序.释放模式在例外情况下很难使用线号. 以调试模式编译您的应用程序(无需附加调试器),看看是否将其分类为止.
14 2024-04-19
编程技术问答社区
有什么办法可以避免C#中的Property内联优化?
所以我有一个旨在实现InotifyPropertyChanged的属性包类.为了使此代码尽可能清晰地工作并避免用户错误,我正在使用堆栈获取属性名称.看看,如果属性名称与实际属性完全不匹配,那么您将遇到失败,我正在尝试保护它. 所以,这是类的示例用法: public class MyData : PropertyBag { public MyData() { Foo = -1; } public int Foo { get { return GetProperty(); } set { SetProperty(value); } } } 基本属性袋的重要代码在这里: public abstract class PropertyBag : INotifyPropertyChanged { protected T GetProperty() {
8 2024-04-19
编程技术问答社区
在.net中从用户的错误报告中重现带有行号的堆栈跟踪?
首先,问题: 我有几个免费的项目,并且作为任何软件都包含错误.遇到错误的一些其他用户给我发送了带有堆栈跟踪的错误报告.为了简化查找​​故障位置,我想在此堆栈跟踪中查看行号.如果没有.pdb文件的应用程序,则所有行信息都将丢失,因此当前我所有使用.pdb文件部署的项目,因此生成的堆栈跟踪具有此数字. 但!但是我不想在分发中看到此文件,而是想删除所有.pdb.他们使用户感到困惑,在安装程序中消耗空间等 delphi解决方案: 很久以前,当我还是Delphi程序员时,我使用了以下技术:在例外,我的应用程序在堆栈上行走并收集地址.然后,当我收到错误报告时,我使用了一个工具,该工具基于收集的地址和位于我的计算机上的相应符号文件重建有效的堆栈跟踪. 问题: .NET中是否有LIB,技术或其他要做的事情? 状态更新:非常有趣,这通常提出问题是开始您自己的调查的最佳方法.例如,我在一段时间内考虑了这个问题,但仅几天前就开始寻找答案. 选项1:小型.经过大量谷歌搜索后,我找到了一种
2 2024-04-18
编程技术问答社区
在.net中从用户的错误报告中重现带有行号的堆栈跟踪?
首先,问题: 我有几个免费的项目,并且作为任何软件都包含错误.遇到错误的一些其他用户给我发送了带有堆栈跟踪的错误报告.为了简化查找​​故障位置,我想在此堆栈跟踪中查看行号.如果没有.pdb文件的应用程序,则所有行信息都将丢失,因此当前我所有使用.pdb文件部署的项目,因此生成的堆栈跟踪具有此数字. 但!但是我不想在分发中看到此文件,而是想删除所有.pdb.他们使用户感到困惑,在安装程序中消耗空间等 delphi解决方案: 很久以前,当我还是Delphi程序员时,我使用了以下技术:在例外,我的应用程序在堆栈上行走并收集地址.然后,当我收到错误报告时,我使用了一个工具,该工具基于收集的地址和位于我的计算机上的相应符号文件重建有效的堆栈跟踪. 问题: .NET中是否有LIB,技术或其他要做的事情? 状态更新:非常有趣,这通常提出问题是开始您自己的调查的最佳方法.例如,我在一段时间内考虑了这个问题,但仅几天前就开始寻找答案. 选项1:小型.经过大量谷歌搜索后,我找到了一种
16 2024-04-18
编程技术问答社区
我怎样才能重新抛出一个内部异常,同时保持到目前为止产生的堆栈跟踪?
重复: in C#,如何如何我可以在不丢失堆栈跟踪的情况下重新固定感受吗? 我有一些操作,这些操作在背景线程上不同步.有时候,事情变糟了.发生这种情况时,我倾向于获得目标触发性诊断,虽然适当,但它是毫无用处的.我真正需要的是TargetInvocation Exception的Innerexception,因此: try { ReturnValue = myFunctionCall.Invoke(Target, Parameters); } catch (TargetInvocationException err) { throw err.InnerException; } 这样,我的呼叫者得到了发生的真实例外.问题是,投掷语句似乎重置了堆栈跟踪.我基本上想重新恢复内部例外,但请保持原始的堆栈跟踪.我该怎么做? 澄清: 我只想要内部例外的原因是,此类试图"抽象"这些函数(呼叫者提供的委托
24 2024-04-18
编程技术问答社区
我可以得到我的c#应用程序中所有线程的堆栈跟踪吗?
我在工作中的大量应用程序中调试了一个明显的并发问题.所讨论的错误仅在运行了许多(12+)小时后表现在某些绩效较低的机器上,而我从未在调试器中重现它.因此,我的调试工具基本上仅限于分析日志文件. c#使得抛出异常的线程的堆栈轨迹很容易,但是我还想在抛出例外时在我的appdomain中执行的所有其他线程的堆栈跟踪. 这是可能的吗? 解决方案 编码器上有一个工具,称为托管stack Explorer (我相信起源于Microsoft) .它使用调试和分析API来捕获运行.NET应用程序中线程的堆栈痕迹,而无需修改应用程序. 您可以运行应用程序,直到遇到问题,然后使用此工具使用此工具来捕获所有运行线程的当前堆栈痕迹.这种方法的好处是,您将应用程序未修改(仪器可能会改变其行为),并且该工具是免费的. 其他解决方案 我建议在发生异常时进行过程.在您正在登录例外的同一地点,请致电下面的makedumpfile()方法. 这是假设您有 windows deckug
14 2024-04-17
编程技术问答社区
我可以得到我的c#应用程序中所有线程的堆栈跟踪吗?
我在工作中的大量应用程序中调试了一个明显的并发问题.所讨论的错误仅在运行了许多(12+)小时后表现在某些绩效较低的机器上,而我从未在调试器中重现它.因此,我的调试工具基本上仅限于分析日志文件. c#使得抛出异常的线程的堆栈轨迹很容易,但是我还想在抛出例外时在我的appdomain中执行的所有其他线程的堆栈跟踪. 这是可能的吗? 解决方案 编码器上有一个工具,称为托管stack Explorer (我相信起源于Microsoft) .它使用调试和分析API来捕获运行.NET应用程序中线程的堆栈痕迹,而无需修改应用程序. 您可以运行应用程序,直到遇到问题,然后使用此工具使用此工具来捕获所有运行线程的当前堆栈痕迹.这种方法的好处是,您将应用程序未修改(仪器可能会改变其行为),并且该工具是免费的. 其他解决方案 我建议在发生异常时进行过程.在您正在登录例外的同一地点,请致电下面的makedumpfile()方法. 这是假设您有 windows deckug
20 2024-04-17
编程技术问答社区
如何抛出异常而不重设堆栈跟踪?
这是是否有一个后续问题"投掷"和" throw ex"之间的区别? 是否可以在不重置堆栈跟踪的情况下提取新的错误处理方法? [edit] 我将同时尝试"内部方法"和另一种 由earwicker提供,看看哪个可以更好地标记答案. 解决方案 不确定您是否的意思,但是我在另一个问题中的建议是解决这个问题. 如果您的处理程序返回布尔值,无论是否处理过异常,您可以在捕获条款中使用此布局: catch (Exception ex) { if (!HandleException(ex)) { throw; } } 其他解决方案 使用.NET Framework 4.5现在有一个 由于请求在评论中引起的代码示例 using System.Runtime.ExceptionServices; class Test { private ExceptionDispatchInfo _exInfo; public void Dele
20 2024-04-17
编程技术问答社区
C#相当于Java'的Exception.printStackTrace()?
是Java的Exception.printStackTrace()是否有C#等效方法,或者我必须自己写东西,在Innerexceptions中努力? 解决方案 尝试以下方法: Console.WriteLine(ex.ToString()); 来自 ToString的默认实现获得了抛出当前异常的类的名称,消息,在内部异常上调用ToString的结果以及呼叫环境的结果.如果这些成员中的任何一个为null,则其值不包括在返回的字符串中. 请注意,在上面的代码中,不需要调用ToString,因为有一个超载System.Object和直接调用ToString. 其他解决方案 我想补充:如果要在异常外打印堆栈,则可以使用: Console.WriteLine(System.Environment.StackTrace); 其他解决方案 正如Drew所说,只需转换例外,字符串就这样做了.例如,此程序: using System; class Te
18 2024-04-17
编程技术问答社区
当抛出一个异常时,从堆栈跟踪和框架中获取文件名
我试图在抛出异常时获得文件名和酸味号. 但是我什么都没有. class Program { static void Main(string[] args) { try { throw new InvalidOperationException(); } catch (InvalidOperationException exception) { var stackTrace = new StackTrace(exception); var currentFrame = stackTrace.GetFrame(0); var fileName = currentFrame.GetFileName(); var sourceLineNumber = currentFrame.
10 2024-04-16
编程技术问答社区