在代码中启动调试器

问题描述 投票:44回答:4

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

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

那么,有没有办法让Excel,或者更确切地说,我的代码在实例化时调用调试器,所以我可以弄清楚为什么我的图像资源在部署的应用程序中不可用?

谢谢。

兰迪

c# visual-studio-2010 debugging
4个回答
101
投票
System.Diagnostics.Debugger.Launch();

3
投票

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


2
投票

要从代码使用强制断点:

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

有时,应用程序无法从Visual Studio启动,但必须进行调试。如果Visual Studio正在运行,我使用此代码检查应用程序内的表单,并提供将其附加到Visual Studio的可能性。

using System.Diagnostics;

....

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

// If Visual Studio is running halt the application by showing a MessageBox and give opportunity to attach the debugger
if(procName.Length > 0)
    MessageBox.Show("Wait for debugger attach");

// Force a breakpoint when the debugger became attached
if (System.Diagnostics.Debugger.IsAttached)
    System.Diagnostics.Debugger.Break(); // force a breakpoint

0
投票

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

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

我认为,从你所说的,你需要的是正确的异常和错误记录,像Log4Net或NLog这样的东西,它存储了每个异常的所有东西(堆栈跟踪,异常细节......),所以你会清楚地确定真正的问题是。

© www.soinside.com 2019 - 2024. All rights reserved.