Tag: visual studio debugging

StackTrace / StackFrame不会在生产环境中返回预期信息

我在ASP.NET Web应用程序中使用以下方法来接收exception的堆栈跟踪: public static void getStackTraceInfo(System.Diagnostics.StackTrace trace) { for (int i = 0; i < trace.FrameCount; i++) { int nLine = trace.GetFrame(i).GetFileLineNumber(); int nCol = trace.GetFrame(i).GetFileColumnNumber(); string methodName = trace.GetFrame(i).GetMethod().Name; } } try { } catch(Exception ex) { getStackTraceInfo(new System.Diagnostics.StackTrace(ex, true)); } 如果我在Visual Studio 2010开发环境中运行它,它会为我提供完整的行/列/方法名称信息,但在IIS上的生产环境中,它将返回所有0和方法名称为空字符串。 我是否还需要做一些特殊的事情才能使它在IIS上运行?

Visual Studio如何知道源文件是否与原始版本匹配?

我想出了.NET程序集.dll文件如何使用GUID( 博客 )映射到.pdb。 当我调试到一个程序集并询问源代码时,如果我导航到一个文件,它可能会告诉我源代码与原始代码不同。 怎么知道这个? 我原以为.pdb文件包含每个文件的校验和,但它似乎没有。 我发现转储调试信息的最佳工具是dia2dump 。 C ++ .pdb文件有MD5条目,但C#.pdb文件没有。 C ++转储 dia2dump -f dia2dump.pdb> dia2dump.pdb.files.txt C#转储 dia2dump -f Autofac.pdb> Autofac.pdb.files.txt dia2dump -all Autofac.pdb> Autofac.pdb.all.txt 在“全部”转储中是否有我遗漏的东西? 它必须使用校验和。 如果我在Module.cs中更改单个字符,我会得到: 在哪里可以找到.pdb中引用的源文件的校验和?

调试异步/等待(调用堆栈)中的exception

我使用Async / Await释放我的UI-Thread并完成multithreading。 我遇到exception时遇到问题。 我的异步部分的Call Stack总是从ThreadPoolWorkQue.Dipatch()开始,这对我没有多大帮助。 我找到了MSDN文章Andrew Stasyuk。 Async Causality Chain跟踪它,但据我所知,它不是一个随时可用的解决方案。 如果在Async / Await中使用multithreading,最好/最简单的调试方法是什么?

VS2013调试/ Windows /任务:“没有要显示的任务”

我有Visual Studio Professional 2013,我正在调试一个广泛使用async / await的应用程序。 但是当我在断点处停止并打开Debug / Windows / Tasks窗口时,它总是说“没有要显示的任务”。 我做了两个测试,在一个我可以看到任务,在另一个我不能(我运行程序,并暂停它)。 或者我可以在等待任务线时断点。 using System; using System.Threading; using System.Threading.Tasks; namespace TasksDebugWindowTest { class Program { static void Main(string[] args) { DoesNotWork(); } static void Works() { Console.WriteLine(“Starting”); var t = Task.Factory.StartNew(() => { Task.Delay(100 * 1000).Wait(); Console.WriteLine(“Task complete”); }); Console.WriteLine(“Status: {0}”, t.Status); Thread.Sleep(500); Console.WriteLine(“Status: {0}”, […]

无法调试VSIX项目

我正在尝试开发我的第一个visual studio扩展项目,我安装了VS10 SDK并且能够创建一个新项目并且可以构建它,但是当我尝试调试符号时没有加载。 我知道我可以调试到VSIX项目,因为我已经在网上下载了一个示例项目并且它已经加载了符号并且断点正好受到影响http://weshackett.com/2009/11/configure-vsix-project-to-enable – 调试/ )。 所以必须特别关注我创建VSIX项目的方式(也许!)。 我注意到的一件事是,dll和文件没有被复制到本地“应用程序数据”区域,只复制清单,而对于示例项目,所有文件都被复制,包括dll。 我比较了两者之间的项目设置,它们都是相同的。 我希望这是有道理的,如果我能提供更多细节,请告诉我……

需要调试从客户端计算机请求的Web API服务 – 需要帮助,我该怎么做?

我构建了一个Web API服务,该服务在我的IIS机器上本地托管。 我有一个iOS应用程序,我通过XCode运行,调用Web服务。 连接就在那里,并且有效。 iOS应用程序成功连接到我发布的Web服务。 问题是我的Web服务正在向客户端(iOS)返回一个非描述性错误,因此我需要做的是在运行我的iOS应用程序时单步执行Web服务代码。 所以,总结一下: 我通过MacBook运行iOS应用程序,它连接到我的.NET Web API服务。 我的Web API服务发布到我的本地IIS,并将错误返回给客户端。 在Visual Studio中没有遇到断点 – 我是否需要将Visual Studio调试器附加到特定进程? 我已经尝试在运行我的iOS应用程序时以调试模式运行我的Web服务,但无济于事。 如何在运行访问Web服务的客户端应用程序(iOS)时单步执行我的Web服务代码?

如何调试从外部应用调用的类库?

有一个外部工作流可以执行C#脚本,并且能够使用DLL文件(我的类库)。 是否可以将调试附加到我的类库项目中,这样一旦这个WF调用它就会遇到断点? 谢谢

禁用/删除子断点?

我在Visual Studio中使用C#调试ASP.NET网站。 当我设置断点(在调试期间)时,随着时间的推移,创建的断点将累积许多子断点。 (见这里 。) 现在,有时当我通过单击红色字形删除断点时,断点仍将在下次执行该行时被触发,因为子断点仍然存在。 在断点窗口中删除断点将解决问题,但是当你有许多设置时找到正确的断点很烦人。 此外,删除许多孩子的断点是一个非常缓慢的操作。 那么为了解决这个问题,我可以禁用这个子断点的创建,还是有办法快速删除所有孩子? 备受欢迎的解决方案! 请注意,这与此不重复: 有关如何删除Visual Studio断点的问题 ,因为我正在询问如何处理子断点。 (虽然我们的预期目标是相同的。)

阻止visual studio在任务中打破exception

我有以下代码: Task load = Task.Factory.StartNew(() => {//Some Stuff Which Throws an Exception}); try { load.Wait(); } catch (AggregateException ex) { MessageBox.Show(“Error!”); } 当任务中抛出一个exception时,我希望它在try catch中被冒泡,而不是在导致exception的时候打破visual studio。 我尝试谷歌和一些建议我在我的方法上添加这个[DebuggerHidden]但它不起作用

Lazy :“函数评估需要所有线程运行”

我有一个带有一些静态属性的静态类。 我在静态构造函数中初始化了所有这些,但后来意识到它是浪费的,我应该在需要时懒惰加载每个属性。 所以我切换到使用System.Lazy类型来完成所有脏工作,并告诉它不要使用它的任何线程安全function,因为在我的情况下执行始终是单线程的。 我最后得到了以下课程: public static class Queues { private static readonly Lazy g_Parser = new Lazy(() => new Queue(Config.ParserQueueName), false); private static readonly Lazy g_Distributor = new Lazy(() => new Queue(Config.DistributorQueueName), false); private static readonly Lazy g_ConsumerAdapter = new Lazy(() => new Queue(Config.ConsumerAdaptorQueueName), false); public static Queue Parser { get { return g_Parser.Value; } […]