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

本文关键字:运行 实例 VS 调试器 可执行文件 附加 | 更新日期: 2023-09-27 18:02:33

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

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

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

现在有些东西出了问题,我似乎不能设置一个断点后附加VS调试器到我的应用程序的实例。它允许设置一个断点在调用MessageBox.Show,但由我附加的时候,调用已经执行。在此点之后不能设置断点。

The error says the breakpoint failed to bind.

问题是,有没有可能调试发布版本而不去编译和安装调试版本的麻烦?

另外,是否有可能为VS调试器启动可执行文件本身,以便有效的断点可能被击中?

EDIT:如果它是相关的,对MessageBox.Show的调用是最后一行代码。这就是为什么断点不能在后面的大括号处设置吗?

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

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

使用给定的命令行参数启动调试会话也是可能的,并且非常简单-只需打开项目属性,转到Debug选项卡,并添加所需的命令行参数。您甚至可以选择一个不同的可执行文件来启动(对于dll来说很方便)。

如果您真的需要调试安装的应用程序,您需要首先构建调试版本并安装它,以便能够附加和使用断点。发布版本缺少钩入代码所需的调试符号。如果应用程序的安装与你想要测试的内容无关,你可以在项目设置中设置命令行参数,并将断点设置为正常,然后从VS.

以调试模式运行应用程序。

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

System.Diagnostics.Debugger.Launch();

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