2012-05-06 65 views
2

我使用VS 2010 Ultimate开发C#应用程序。 通常,这些应用程序运行很长时间,无需用户交互,当然,它们通常在内部存在错误。在Visual Studio外运行的调试应用程序

不幸的是,应用程序经常会随机崩溃,而您无法重现错误。有时候,我只有“应用程序停止工作”的信息,没有更多的信息。

我可以在客户机上安装Visual Studio,但我不能让他运行VS并在调试模式下编译/启动源代码!我需要的是启动VS 应用程序已启动并崩溃。这似乎是可能的,事实上,当运行时发生异常时,Windows会问你“你想用VS进行调试吗?”,但是如果我回答YES,那么VS就会启动,但是我根本看不到源代码代码(它也在PC上),因此我无法检查导致异常的那行代码。 VS只是告诉我“源代码不可用”。实际上,我无法想象Windows如何启动VS并知道崩溃应用程序的源代码在哪里!

有谁知道这个调试场景是如何工作的,以及如何配置?

非常感谢, 西蒙娜

+1

记录异常详细信息/调用堆栈很长的路线 – BrokenGlass

+0

可能的重复[如何使用PDB文件](http://stackoverflow.com/questions/72104/how-do-i-use-pdb-files) – BrokenGlass

回答

0

如果你想赶上错误,同时运行编译后的程序,你应该使用某种记录机制。现在你不需要自己编写它,为.NET应用程序设计了一个很好的开源日志记录引擎,它被称为NLog。它能够将日志保存到文件,电子邮件,控制台或数据库中,几乎可以满足所有需求:)。

希望这有助于:)

+0

Thankyou Ernestas,我知道NLog,但是如果我不知道发生异常的位置,我不知道要记录什么,当然,我无法为每个源代码行添加日志行!此外,该软件是多线程,这使得很难解释日志输出,因为它是连续的... – user1378544

1

Windbg调试工具解决了这个问题。

转储过程状态并开始使用windbg分析。它给你的异常信息

+0

嗨Rockstart,感谢您的suggestio:只是不知道如何转储过程! – user1378544

+0

如果您使用的是WinXP,请使用ProcessExplorer创建转储。如果是win7,您可以右键单击任务管理器窗口中的进程并创建转储。请看这里[约翰罗宾斯的博客](http://www.wintellect.com/cs/blogs/jrobbins/archive/2010/06/17/how-to-capture-a-minidump-let-me-count-the -方法。aspx) – Rockstart

1

要从已在运行Visual Studio实例调试中,选择“调试”菜单项,然后在“附加到进程...”

Attach to Process

接下来,选择从列表中的可执行文件,按下“附加”(或双击),然后您正在调试应用程序。当您选择“是”并且Windows说源代码不可用时,这很可能意味着PDB无法加载,因此请确保您已经通过在“模块”中检查它来加载模块的符号“窗格。

+0

我无法连接到该进程,因为当异常发生时Visual Studio已启动并自动附加到已崩溃的进程,但这没关系。无论如何,我要感谢Lander,因为我不知道Modules面板,并且我在“Source not available”消息下找到了一个表示“查找源代码”的链接:只需单击并找到源文件,它就可以工作!万分感谢!! – user1378544

+0

是的,我相信你一次只能有一个调试器实例。抛出异常之前附加,如果你选择打破这个过程,你可以添加断点和其他任何你想要的。 – Lander

相关问题