将VS调试器附加到可执行文件而不是运行实例

时间:2015-07-14 15:38:47

标签: c# .net visual-studio debugging visual-studio-2013

我正在尝试将VS调试器附加到我自己的一个应用程序中,该应用程序是从Release配置中的安装目录运行的。

当应用运行时,它立即显示MessageBox,表示应用程序是使用无效的命令行参数启动的。当双击关联文件(* .MyAppFileExtension)时,shell已将这些参数传递给应用程序。

安装程序将shell配置为发送这些命令行。

现在出现了问题,在将VS调试器附加到我的应用程序实例后,我似乎无法设置断点。它允许在调用MessageBox.Show时设置断点,但是在我附加时,调用已经执行。此后不能设置断点。

The error says the breakpoint failed to bind.

问题是,是否可以在不编译和安装Debug版本的情况下调试发行版本?

此外,VS调试器是否可以自行启动可执行文件,以便可能会触发有效的断点?

编辑:如果相关,则对MessageBox.Show的调用是最后一行代码。这就是为什么在接下来的结束时不能设置断点的原因吗?

3 个答案:

答案 0 :(得分:1)

如果您可以修改代码,处理此问题的最简单方法是在Debugger.Launch();函数的开头添加Debugger.Break()(或Main立即中断)。这将允许您在应用程序启动后立即附加调试器。

使用给定的命令行参数启动调试会话也很简单 - 只需打开项目属性,转到“调试”选项卡,然后添加所需的任何命令行参数。您甚至可以选择要启动的其他可执行文件(方便DLL)。

答案 1 :(得分:1)

如果您确实需要调试已安装的应用程序,则需要首先构建调试版本并安装该版本,以便能够附加和使用断点。发布版本缺少挂钩代码所需的调试符号。如果安装应用程序的事实与您要测试的内容无关,您可以在项目的设置中设置命令行参数并正常设置断点,然后从VS运行调试模式的应用程序。

答案 2 :(得分:1)

你只需要在执行其他代码之前添加一行代码。

System.Diagnostics.Debugger.Launch();

可能你只需要添加Main函数的第一行。