在代码中启动调试器

时间:2011-09-01 21:45:02

标签: c# visual-studio-2010 debugging

我需要调试从一键安装启动的应用程序。 (VS 2010,Excel VSTO与Office 7)。根据提供给一键安装程序应用程序的登录凭据,用户应该看到两个启动页面中的一个。这一切在我的机器上运行正常,但在部署时,从默认页面更改为第二个启动页面会导致错误。

对于我的生活,我无法弄清楚如何从VS2010中调试过程。我可以在输入凭据之前附加到登录名,但我无法附加到Excel,因为在我单击“确定”按钮之前它不会启动。

那么,是否有某种方法可以使用Excel,或者更确切地说,我的代码在实例化时调用调试器,因此我可以弄清楚为什么我的图像资源在部署的应用程序中不可用?

感谢。

兰迪

4 个答案:

答案 0 :(得分:98)

System.Diagnostics.Debugger.Launch();

答案 1 :(得分:4)

如果您安装了Visual Studio,Juan的答案是最好的。但是如果目标机器人没有它,你可能需要进行某种暂停(我通常会在主体中放置一个对话框,使其等待我连接)然后使用remote debugger在你的机器上贴上它

答案 2 :(得分:0)

如果运行时间足够长,你可以附加到Excel,但严重的是我怀疑错误是否存在。

您可以附加到正在运行的应用程序/进程,如果符号可用(调试版本),您可以进行实际调试,但应用程序必须足够长,以便您选择它进行附加。

我认为,根据您所说的,您需要的是正确的异常和错误记录,Log4Net或NLog之类的东西,它会在每个异常中存储所有内容(堆栈跟踪,异常详细信息......),因此您可以清楚地识别真正的问题是什么。

答案 3 :(得分:0)

要在代码中强制使用断点,请执行以下操作:

if (System.Diagnostics.Debugger.IsAttached)
    System.Diagnostics.Debugger.Break();

有时,必须在Visual Studio外部启动应用程序。然后,我使用此代码稍后附加调试器:

using System.Diagnostics;

....

Process[] procName = Process.GetProcessesByName("devenv"); // check if VS currently running

if(procName.Length > 0)
    MessageBox.Show("Wait for debugger attach");

if (System.Diagnostics.Debugger.IsAttached)
    System.Diagnostics.Debugger.Break(); // force a breakpoint