如何调试一个C#命令行程序
如何调试一个C#命令行程序
我正在尝试使用VS2010在C#中构建一个命令行工具。
我的问题是:如何像调试winforms一样调试它?
在winforms中,我可以逐步执行代码,查看每个步骤的值等等...
然而,在这里,程序只在我从命令行与其交互时响应。我无法启动调试会话,因为这将完全启动程序。由于程序的性质,它会因为没有命令行参数而自动关闭。
所以无法进行调试。
在这种情况下我需要做什么?
编辑:举个例子,因为有人提了一条评论,使我感到需要解释一下。
C:\Path\To\File\file.exe -help
这是如何调用这个程序的例子。命令“-help”在启动程序的同一行中给出。换句话说,我不能先启动程序,然后在它运行时再给它一个命令...因为它不会再运行了。它会启动,看到启动时没有参数,然后因此关闭。这就是命令行工具的工作方式。
- 激活
- 处理可能的参数
- 输出结果
- 自动关闭
它不是一直运行直到你点击右上角的小x。
文章标题:如何调试一个C#命令行程序
你可以使用Visual Studio将调试器附加到命令行应用程序,一旦它以正确的参数启动。我不确定你的应用程序是否会快速终止或者给你任何机会附加调试器,但是如果可以的话,这个方法应该有效。
我使用的是VS2008,但我敢打赌在2010年的版本中步骤是类似的:
1. 在VS中,转到"工具",点击"附加到进程"
2. 从列表中选择你的应用程序,然后点击"附加"
现在,VS应该能够进入你的应用程序并在出现错误时中断。
在这种情况下不太可能。命令行应用程序启动和关闭得非常快,以至于他没有机会以这种方式附加到它。上面的建议要好得多。
没错。我只是希望也许会有一个阻塞输入,可以给他们附加调试器的机会。但是,考虑到它接受命令行参数,我认为这是不太可能的。
如果他有源代码,他可以轻松地插入一个Console.Readline
来暂停程序足够长的时间,以便他可以附加调试器。然后按下一个键,就可以开始调试了。我认为这个方法没有理由被否定,它可以在一个简单的一行代码更改后完美地工作。
问题出现的原因是在调试C#命令行程序时,可能无法通过项目属性的调试选项来设置命令行参数。解决方法是通过在启动代码中添加调用Debugger.Launch()方法或System.Diagnostics.Debugger.Break()方法来启动调试器,并在命令行中启动应用程序。
以下是整理后的
你可以在启动代码中添加一个对Debugger.Launch()方法的调用。然后编译并从命令行启动你的应用程序。你将会收到一个提示,询问你想要附加的调试器是哪个(通常这将是你安装的不同版本的Visual Studio的列表),然后你就可以开始调试了。
(但实际上,大部分情况下,在项目属性的调试选项中设置命令行参数是更好的方法。如果这种方法对你不起作用,你应该找出原因。)
System.Diagnostics.Debugger.Break()也具有类似的效果。
不,它不具有相同的效果。Debugger.Break()只向已附加的调试器发送断点信号,而Debugger.Launch()则会启动并附加调试器到该进程。
它是有效的,只是意味着你一次只能测试一个命令,所以如果你在命令行界面中进行多个测试,这并不是一个好方法。
通过向运行配置添加参数就可以解决这个问题。