【问题标题】:VS2010 - Debug win32 console application using cmd.exeVS2010 - 使用 cmd.exe 调试 win32 控制台应用程序
【发布时间】:2016-08-12 16:55:36
【问题描述】:

我是 C 编程的新手,我目前正在开发一个简单的 Win32 控制台应用程序来帮助我学习。我在工作中这样做,他们为我提供了 Visual Studio 2010。我们的工作计算机受到限制,因此我无法安装其他软件或进行需要管理员访问权限的更改。

在尝试调试我的程序时,我发现有几个选项可用。下面两个是我想用的:

  1. 开始调试
  2. 不调试就开始

当我选择选项 1 时,应用程序会直接启动(就像我双击 .exe 文件一样)。但是,当我选择选项 2 时,应用程序是通过 cmd.exe 间接启动的。此外,在应用程序正常终止的地方,会出现一行文本,上面写着“按任意键继续”。这会让控制台保持打开状态,直到我按下另一个键。

有没有办法修改 Visual Studio 中的设置,使选项 1 的行为与选项 2 相同,但仍允许调试?如果没有,是否有任何其他解决方法可以完成相同的事情并且可以使用单个键盘快捷键启动?

【问题讨论】:

  • 什么是“直接”?
  • @EugeneSh。据我所知,似乎 VS 是通过直接调用它而不是使用 Windows 命令提示符 (cmd.exe) 来加载它来加载可执行文件。如果我的术语具有误导性和/或不正确,我深表歉意,但我在应用程序开发方面的经验很少。
  • 如果在您的程序退出之前“按任意键继续”提示就是您所需要的,那么@BenVoigt 对我下面的回答的评论实际上就是对您问题的回答
  • @mvidelgauz 在程序中添加退出前暂停功能不是我想做的。我喜欢通过 Windows 命令提示符加载我的控制台应用程序,因为这样做会增加额外的功能(即复制/粘贴)。此外,我喜欢仅在调试时自动添加暂停的想法。当我发布这个问题时,我假设在 VS 中有一些设置或一个简单的解决方法可以允许启动调试功能执行此操作,因为另一个可以。
  • 我一般会在main的最后一行留断点。

标签: c windows visual-studio-2010 cmd


【解决方案1】:

不幸的是,我不知道任何“开箱即用”(参见下面的替代方法)的方法来使用单个键盘命令完成相同的事情,但以下是我认为可以帮助您的方法:

  1. 在您的代码中添加对 MessageBox_getch 或其他内容的调用以暂停执行,直到用户单击按钮或按键
  2. 使用第二种方法(“无调试”)启动您的应用程序
  3. 当您看到在步骤 1 中创建的消息框或用户输入提示时,请勿继续
  4. 在 Visual Studio 中的“调试”菜单下调用“附加到进程...”。
  5. 在当前运行的进程列表中找到您的应用程序。您可以通过消息框标题或用户提示或进程 ID 来识别它。选择该进程并点击“附加”按钮
  6. 当您看到 VS 附加到该进程后,切换到应用程序(cmd 窗口)并单击按钮或按键继续执行。从那时起,您的应用程序将在调试器下运行

如果你真的需要一个命令来完成所有这些,我认为你需要编写自己的VS macro。如果您需要有关此类宏的帮助,可能需要换个问题。

[编辑]

您在问题中说您使用的是 VS2010,因此以下可能不适合您,但以防万一我会在此处添加它: 如果您使用的是 VS2013 或 (2015),您可以使用 Child Process Debugging Power Tool (another link),这将允许您将 cmd $(TargetPath) 指定为“命令”,然后使用您的第一个选项调试 cmd 及其子进程,这恰好是您的进程(来自 VS2012 的屏幕截图,但VS版本中存在相同的选项)

【讨论】:

  • 感谢您提供的信息。我测试了您的逐步方法,并且确实允许我在加载程序后附加调试器。但是,我希望找到一个每次都不需要多个步骤并暂停程序的解决方案。我会研究一下 VS 宏。
  • 根据this question 中给出的答案,VS 宏对我来说不是一个选项。
  • 那么如何超越宏到VS extenstions
  • 在程序退出时添加阻塞读取,然后正常开始调试不是更容易吗?
  • @BenVoigt 抱歉,我不确定我是否理解您的意思。能详细点吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多