【问题标题】:How do I debug existing C programs with Visual Studio 2010 Professional?如何使用 Visual Studio 2010 Professional 调试现有的 C 程序?
【发布时间】:2011-07-23 13:32:00
【问题描述】:

如何在教科书中找到的现有 C 程序上使用 Visual Studio 调试器?我想一个一个地调试这些小例子,但没有为每个例子创建一个完整项目的开销。

示例:假设我从 Visual Studio 命令提示符(“cl.exe helloworld.c”)编译“helloworld.c”。这给了我 helloworld.obj 和 helloworld.exe。我想知道是否有办法在“helloworld.exe”上使用 VS 调试器。到目前为止,我只在成熟的项目中使用过调试器;我不知道如何在没有 Visual Studio 项目开销的情况下调试小型“独立”测试程序。 (我希望这不是一个愚蠢的问题,因为 VS 调试器可能仅适用于整个项目。)

感谢您的任何想法。

【问题讨论】:

  • 在整个代码中明智地应用几个 printfs 有什么问题?
  • 不能每次要调试不同的小程序,就创建一个VS项目,然后覆盖源代码吗?
  • @pmj:这有很多问题!

标签: c visual-studio-2010 visual-studio-debugging


【解决方案1】:

您为什么不创建一个项目来测试示例代码?您可以为所有示例创建一个 .c 文件。这看起来像

void sampleA()
{
 //hello world
}

void sampleB()
{
 //hello everybody else
}

void main(int argc, char** argv)
{
//  sampleA(); 
  sampleB();
}

【讨论】:

  • 如果有人遇到同样的问题,我就是这样做的: - 创建空的 Visual C++ 项目 - 将 *.h 和 *.c 文件复制到项目目录中 - 添加一个 (!) 源文件 (" foo.c") 使用解决方案资源管理器 > 源文件 > 添加 > 现有项 - 使用属性 > 配置属性 > 调试 > 命令参数将命令行参数添加到项目 - 设置断点,按 F5 并调试 - 替换源文件“foo.c " 与下一个示例 "bar.c" - 由于 "bar.c" 也将具有 main() 函数,因此您必须从源文件中删除 "foo.c" 以避免冲突。 - 冲洗并重复。
【解决方案2】:

当我不得不使用VS时,我所做的就是重用我很久以前创建的plain.c项目

只需在此处粘贴新代码即可。如果您想保留它,请将代码放在另一个文件中。

【讨论】:

    【解决方案3】:

    调试器是 Visual Studio 的一部分,因此无论如何您都必须启动它。但是,要使调试器与您的源代码一起正常工作,您还需要生成一个 PDB 文件(请参阅here)。您可以通过在 cl.exe 中包含 /Zi/ZI 作为参数来获得此信息(请参阅 here)。

    【讨论】:

    • 谢谢,刚刚试过。我得到“无法枚举可执行文件中的资源”。 (请参阅下面的下一个答案。)
    【解决方案4】:

    这并非不可能,但您必须了解更多关于如何准确从命令行构建程序以获得最佳调试体验。有很多选项可以实时节省时间,并大大提高您发现错误的几率。

    现在有点离题了,学习 C 而不是花时间学习一个无聊的工具,方式有太多的选择。经过一点练习后,创建一个新项目需要 5 秒钟。使用 Win32 控制台应用程序项目模板。

    如果您想编译为 C 而不是 C++,则必须更改一个小设置。右键项目,Properties,C/C++,Advanced,Compile As = Compile as C Code。

    【讨论】:

    • 您通常不需要手动设置“编译为C代码”。如果您有 *.c 文件,则将其编译为 C 代码,而 *.cpp 文件将编译为 C++。
    • 模板启用的预编译头支持需要多处更改,选项更改最简单。
    【解决方案5】:

    如果您决定不使用项目,那么您可以这样做。随着代码文件数量的增加,它变得更加困难。

    首先,要进行任何有意义的源代码级调试,您需要生成调试符号。将“/Zi”开关添加到您的cl.exe 命令行:

    cl.exe /Zi helloworld.c
    

    这将生成helloworld.exehelloworld.objhelloworld.pdb(这些是调试符号)。

    接下来,您将打开 Visual Studio 2010。使用 File -> Open -> File... 并选择 helloworld.exe。它将为您的 EXE 文件生成一个包含一个项目的包装解决方案。

    在解决方案资源管理器中,右键单击 EXE 文件并选择 Debug -> Step Into new instance。

    它应该会弹出一个源窗口并显示程序的第一行。现在,调试吧!

    【讨论】:

    • 谢谢,我试过了。将生成文件,包括 pdb 文件。但是,当我使用 File -> Open -> File... 并选择 helloworld.exe 时,Visual Studio 会说:“无法枚举可执行文件中的资源。”我做错了什么?
    • 你必须选择Debug->Attach to process to your running exe。
    • @Daniel Rose,没有必要附加到该过程中,尽管这也可以。 @Rainer,您是否使用 Visual Studio 命令提示符来调用 cl.exe?可能某处有些不匹配。
    【解决方案6】:

    发布这个问题所花费的“开销”几乎没有!

    只需从“空项目”模板开始,然后通过右键单击项目浏览器源文件夹来添加要调试的单个源文件。只需几秒钟。

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2012-03-17
      相关资源
      最近更新 更多