我遇到了一个棘手的小问题。我有一个编译的C#可执行文件,在批处理文件中使用参数调用。我想通过VS2012调试器运行这个可执行文件,但是我不确定如何将调试器连接到可执行文件,因为它是从批处理脚本运行的。
我无法将批处理脚本设置为项目的调试启动文件(仅限.exes),并且我可以找到与批处理文件关联的唯一进程是cmd.exe,而不是允许调试。我已经在批处理脚本的开头添加了pause
,所以理想情况下该进程应该正在运行,我应该能够附加它,但我找不到任何预期名称。
任何人都知道如何做到这一点?这似乎是一个相当简单的问题,但我无法弄清楚如何将其纳入调试器。
答案 0 :(得分:8)
或者只需在代码的开头添加Debugger.Launch()
:
System.Diagnostics.Debugger.Launch();
它将提示您使用所有可用的VS调试器,选择您当前使用的那个。
有关详细信息,请参阅链接:http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch(v=vs.110).aspx
答案 1 :(得分:2)
添加以下行:
System.Diagnostics.Debug.Fail("stopping!");
代码中的好地方。运行你的应用程序命中"重试"并且系统会提示您输入调试器。选择 Visual Studio。
修改强>:
jp.gauthier使用System.Diagnostics.Debugger.Launch();
的解决方案更清晰。反而投票。 :)
答案 2 :(得分:1)
这里有两件事:您无法使用VS调试器调试批处理脚本。因此,当您的exe返回时,脚本会拾取结果,但您无法单步执行该操作。要调试批处理脚本,请使用pause
命令对其进行泛洪,然后离开echo on
以查看正在进行的操作。
要从脚本启动时附加到您的exe,有几种可能性。一个是(暂时)修改exe以在启动时等待一段时间(几秒钟左右),这样你就有时间连接调试器。如果你愿意,甚至可以使用Win32函数来检查是否附加了调试器。我记得有可能使用注册表自动启动调试器的进程,但我现在无法回想起确切的过程。
编辑:Here's一个描述这个想法的主题(答案1)。
答案 3 :(得分:0)
Windows提供了一种通过设置注册表值Image File Execution Options (MSDN)来启动任何可执行文件的调试器的方法。本文准确描述了您的需求:启动Visual Studio作为调试器。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<Yourapp>.exe
。Debugger
devenv /debugexe
完成后别忘了将其删除。