我正在尝试将VS调试器附加到我自己的一个应用程序中,该应用程序是从Release
配置中的安装目录运行的。
当应用运行时,它立即显示MessageBox
,表示应用程序是使用无效的命令行参数启动的。当双击关联文件(* .MyAppFileExtension)时,shell已将这些参数传递给应用程序。
安装程序将shell配置为发送这些命令行。
现在出现了问题,在将VS调试器附加到我的应用程序实例后,我似乎无法设置断点。它允许在调用MessageBox.Show
时设置断点,但是在我附加时,调用已经执行。此后不能设置断点。
The error says the breakpoint failed to bind.
问题是,是否可以在不编译和安装Debug版本的情况下调试发行版本?
此外,VS调试器是否可以自行启动可执行文件,以便可能会触发有效的断点?
编辑:如果相关,则对MessageBox.Show
的调用是最后一行代码。这就是为什么在接下来的结束时不能设置断点的原因吗?
答案 0 :(得分:1)
如果您可以修改代码,处理此问题的最简单方法是在Debugger.Launch();
函数的开头添加Debugger.Break()
(或Main
立即中断)。这将允许您在应用程序启动后立即附加调试器。
使用给定的命令行参数启动调试会话也很简单 - 只需打开项目属性,转到“调试”选项卡,然后添加所需的任何命令行参数。您甚至可以选择要启动的其他可执行文件(方便DLL)。
答案 1 :(得分:1)
如果您确实需要调试已安装的应用程序,则需要首先构建调试版本并安装该版本,以便能够附加和使用断点。发布版本缺少挂钩代码所需的调试符号。如果安装应用程序的事实与您要测试的内容无关,您可以在项目的设置中设置命令行参数并正常设置断点,然后从VS运行调试模式的应用程序。
答案 2 :(得分:1)
你只需要在执行其他代码之前添加一行代码。
System.Diagnostics.Debugger.Launch();
可能你只需要添加Main
函数的第一行。