加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 域百科网 (https://www.yubaike.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

【C语言-25】调试代 码

发布时间:2022-11-30 12:54:41 所属栏目:Asp教程 来源:
导读:  1. 什么是调试?

  在计算机编程中,调试是指排除程序的错误和缺陷的过程。

  调试程序的方式有很多种,包括交互式调试、控制流分析、单元测试、集成测试、日志文件分析、内存分析。

  很多编
  1. 什么是调试?
 
  在计算机编程中,调试是指排除程序的错误和缺陷的过程。
 
  调试程序的方式有很多种,包括交互式调试、控制流分析、单元测试、集成测试、日志文件分析、内存分析。
 
  很多编程语言或软件开发工具都提供一个程序用于调试代码,这个程序被称之为调试器。
 
  本节中,将重点介绍Visual Studio 2019中的调试功能。
 
  2. Debug与Release配置
 
  Visual Studio界面中,工具栏有一个下拉选项,分别为Debug与Release可供选择。
 
  Debug翻译成中文为调试。Release翻译成中文为发行。
 
  使用Debug和Release配置分别进行编译,将会编译出两份不同的可执行文件。
 
  编译后,Visual Studio将会在项目目录的同级目录下,创建Debug或Release文件夹,分别将不同配置的编译结果放入其中。
 
  比较两个配置下编译的可执行文件,可以发现Debug配置编译的可执行文件明显大于Release配置编译的可执行文件。

  2.1 Debug配置
 
  默认情况下,Debug配置编译的可执行文件未经过任何优化,并且附带调试信息。链接的运行库为调试版本。
 
  Debug配置的目标用户是程序员,他们关心软件是否存在错误或缺陷,但是对软件的大小和速度不是非常在意。而在调试配置下生成的可执行文件拥有更强的调试能力。
 
  2.2 Release配置
 
  默认情况下,Release配置编译的可执行文件经过优化,某些流程和变量可能被编译器优化,而与代码中略有不同,不附带调试信息。链接的运行库为发行版本。
 
  Release配置的目标用户是最终使用者,他们不关心软件的开发,但是对软件的大小和速度非常在意。而在发行配置下生成的可执行文件拥有更小的体积和更快的速度。
 
  在解决方案管理器中的工程名上点右键,单击属性。即可进入工程配置面板。

  在工程配置面板中,可以查看Debug与Release配置的详细配置。
 
  Debug配置并未开启任何优化,而Release配置开启了/O2优化。
 
  3. Visual Studio中的调试功能
 
  Visual Studio作为一个集成开发环境,已经将调试器集成到了内部。并且通过图形化界面,可以方便地调试程序。
 
  我们将会以下面的代码,演示在Visual Studio中如何进行交互式调试。
 
  #include
 
  int C()
  {
      char str[] = "HelloWorld";
      for (int i = 0; i < sizeof(str) / sizeof(str[0]); i++)
      {
          putchar(str[i]);
      }
      putchar('\n');
      return 456;
  }
  void B()
  {
      int resultFromC = C();
      printf("resultFromC=%d\n", resultFromC);
  }
  void A(int nInA)
  {
      printf("nInA = %d\n", nInA);
      B();
  }
  int main()
  {
      int nInMain = 123;
      A(nInMain);
      return 0;
  }
  为了有用更好的调试能力,我们将在Debug配置下进行调试。
 
  3.1 断点
 
  我们在代码行数前的灰色部分点击鼠标左键,即可在这一行打上一个断点。下图中,给28行打上了一个断点。
 
  断点的作用:启动调试后,程序运行到断点后将暂停执行,供程序员分析当前的执行状态。
 
  启动调试有3中办法:
 
  单击工具栏中的本地Windows调试器调试菜单中的开始调试F5快捷键
 
  开始调试后,程序将一直运行,直到遇到第一个断点,并暂停执行。
 
  3.2 Visual Studio调试模式
 
  程序触发断点后,Visual Studio将切换到调试模式,这个模式下的窗体布局与之前有些不同。
 
  默认布局下分别有这个几个布局:
 
  代码窗口变量查看窗口调用堆栈诊断工具
 
  如果你的窗体布局略有不同,可以将窗体布局恢复为默认。
 
  3.3 变量查看窗口
 
  当处于调试模式下,自动或局部变量窗口可以显示变量以及值。
 
  自动窗口显示在当前断点附近的变量。
 
  局部变量窗口显示定义在局部作用域内的变量,通常为函数或方法内的变量。
 
  在28行处,可以看到变量名nInMain及其值。目前变量还未初始化,所以变量值为随机值。
 
  监视窗口允许你输入变量名,它将尝试找到这个变量,并显示它的值。如果当前没有这个变量,将无法正常显示变量
 
  以上这些窗口,除了查看变量值,还可以修改显示在窗口中的变量的值。在变量值上双击,可以编辑变量值。
 
  3.4 单步调试
 
  现在我们想让程序继续往下执行下去,查看变量的变化。
 
  图中工具栏中红框标注的4个按钮分别为:
 
  显示下一条语句逐语句(执行下一条语句,如遇函数调用,则进入函数内部)逐过程(执行下一条语句,如遇函数调用,将执行完整个函数)跳出(在函数内部时,跳出函数)
 
  现在我们按下逐语句或逐过程,让nInMain被初始化。
 
  可以看到程序运行到了第29行,自动窗口中,nInMain的值变红表示刚刚修改过,现在的值为123了。
 
  接下来,我们来讨论一下逐语句与逐过程的区别。
 
  逐语句:执行下一条语句,如遇函数调用,则进入函数内部。逐过程:执行下一条语句,如遇函数调用,将执行完整个函数。
 
  使用逐过程后,将直接执行完A函数,到30行。

  使用逐语句后,将进入函数A内部,到21行。
 
  若不想继续单步执行函数内部的语句,可以使用跳出执行完函数A的剩余语句并回到main。
 
  3.5 停止与重新开始
 
  图中工具栏中红框标注的2个按钮分别为:
 
  停止调试重新开始
 
  若在调试过程中,需要终止调试,点击红色的停止调试按钮。点击重新开始按钮将会从停止并重新开始调试。
 
  3.6 继续执行

  图中工具栏中红框标注的按钮为:继续执行
 
  我们先在每个函数的第一条语句上打上断点,之后开始调试。
 
  在28行的断点停下来后,点击继续执行程序将继续开始执行,直到遇到下一个断点。下一个断点在函数B中的16行asp调试器,再次点击继续执行,程序将在函数C中的第5行暂停。
 
  3.7 调用堆栈

  当程序运行到第5行时,我们的函数调用已经经历了如下调用过程:
 
  main调用AA调用BB调用C
 
  通过调用堆栈窗口,我们可以清晰地看出,调用的层级关系。
 
  vs_demo.exe!C() 行 5vs_demo.exe!B() 行 16vs_demo.exe!A(int nInA) 行 24vs_demo.exe!main() 行 29
 
  函数main在29行调用函数A。
 
  函数A在24行调用函数B。
 
  函数main在16行调用函数C。
 
  函数C当前运行到第5行。
 
  双击调用堆栈中的代码行数,可以查看对应行数的代码及附近变量。
 
  3.8 查看数组元素
 
  在查看变量时,可以展开数组,分别查看各个元素的值。

 

(编辑:百客网 - 域百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章