如何在该上下文中调试批处理文件调用的可执行文件?

时间:2014-07-01 18:48:58

标签: c# visual-studio batch-file visual-studio-2012

我遇到了一个棘手的小问题。我有一个编译的C#可执行文件,在批处理文件中使用参数调用。我想通过VS2012调试器运行这个可执行文件,但是我不确定如何将调试器连接到可执行文件,因为它是从批处理脚本运行的。

我无法将批处理脚本设置为项目的调试启动文件(仅限.exes),并且我可以找到与批处理文件关联的唯一进程是cmd.exe,而不是允许调试。我已经在批处理脚本的开头添加了pause,所以理想情况下该进程应该正在运行,我应该能够附加它,但我找不到任何预期名称。

任何人都知道如何做到这一点?这似乎是一个相当简单的问题,但我无法弄清楚如何将其纳入调试器。

4 个答案:

答案 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作为调试器。

  1. 创建密钥HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<Yourapp>.exe
  2. 创建名为Debugger
  3. 的字符串
  4. 将值设置为devenv /debugexe
  5. 完成后别忘了将其删除。