当前位置:   article > 正文

ros 程序断点调试_调试c++程序

ros 断点

程序编译通过,但程序获得的结果不是预期时,我们可能会想一步步跟踪程序,看程序的变量如何变化。

一个办法是在可能发生编错的地方之前写个 cout (之前就是这么做的),但显然比较费劲;

另一个办法就是一般说的调试( debug ),在程序中设置断点( breakpoint ),程序运行到断点时暂停,且可以查看各个变量的具体值。

1.介绍

程序运行过程为:

预处理 -> 编译和优化 -> 生成目标文件 -> 链接 -> 可执行文件

  • 预处理。不对源程序进行解析。仅做些预处理,如宏的替换、删除注释、处理预处理指令,如#include,#ifdef。
  • 编译和优化。解析源代码,查看语法语义是否有错误,有则停止程序同时报错,没有则会生成译文。
  • 生成目标文件。生成二进制代码。
  • 链接。如某个文件用了其它文件的变量或函数,则需要进行链接。
  • 可执行文件。

下面几个图标含义,

3c986005ce2253169c5fdbc6f09943e9.png
  • 编译(compile ,ctrl+F7)。
  • build(F7) 。即执行编译和链接操作,不会显示最终结果。
  • buildstop(ctrl+break)。停止build。
  • buildexecute(ctrl+F5)。全过程,会显示最终结果。
  • Go(F5)。执行到断点处
  • 断点(F9)。设置断点。删除一个断点可以将光标移动到断点处,按一次该键。删除所有断点,可以"编辑"——"断点"——"全部移除"

2.使用

下面的程序在几个地方设置了断点,用注释标记了下。在程序软件里则会显示一个红色的点

  1. #include <iostream>
  2. void cal(float x, float y){
  3. using namespace std;
  4. float z;
  5. z = x + y; //断点
  6. float m;
  7. m = x - y;
  8. cout << "z is : " << z << endl;
  9. cout << "m is : " << m << endl;
  10. }
  11. void main(){
  12. using namespace std;
  13. float x;
  14. x = 3; //断点
  15. float y;
  16. y = 7.8; //断点
  17. for(int i=1; i < 4; i++){
  18. cout << "i is : " << i << endl;
  19. cout << "i+1 is : " << i+1 << endl; //断点
  20. }
  21. cal(x,y);
  22. }

在调试前先进行编译或build,看看有没有语法语义错误。

然后再按F5或对应图标,进入调试模式,执行到第一个断点处 ,

75721f45442abd6dd9da140ccdce14fd.png

看看调试状态的窗口各处,

29119f1968d40b7cfd59c92d47481783.png

1,表示重新开始调试;2,表示关闭调试模式;

3.调试时卡住,按这个。

4,当我们在调试过程改变源代码时,该图表会变亮,表示是否应用改变,再重新调试。

5,快速定位到程序调试到的地方。

6,step into(F11):执行到某个断点处,此时不希望直接执行到下一个断点,而是希望按照代码一步步执行,点击该图标。

如果遇到函数调用,会跟进去函数内部 如果这个函数是系统函数,会变成汇编指令,按下工具栏的Disassembly(16,没标这个数字,从12往后数) 就变成普通代码了 或者弹出一个查找资源的对话框,取消,按step out就回到普通界面了

7,step over(F10):越过去,遇到函数会跨过去,函数里有断点 则不会越过去

8, step out (shift+F11):跳出当前所在函数,函数里有断点不会跳过

9,Run to cursor(ctrl+F10) :运行到光标处,中间有断点不会跳过

断点处一定会停下

10,向监视变量窗口添加监视变量

11,打开或关闭监视变量的窗口(下图右边)

12,打开或关闭变量窗口(下图左边)

97db234c5e862e69f27c8c43ad2add37.png

变量窗口,会显示当前环境的已经声明的变量及其值,如这里显示 “上下文” 后面的main( )函数的变量x,y。当运行进入函数中,如cal( ) ,“上下文”会变为 cal( ),同时变量也变为cal( ) 中定义的变量。

auto指当前环境已经定义的变量;locals表示只在当前环境作用的变量,出了该作用域变量会被删除;this;

监视变量窗口,一开始是空的,需要自己添加监视变量。“上下文”处于main( )时,而添加cal( )的变量时,会显示为找到该变量,不用担心,当运行到cal( )时,就会显示。

监视变量窗口,可以监视调试过程中监视变量的变化。

14,memory,输入变量的地址,可以直接查看内存 。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/496687
推荐阅读
相关标签
  

闽ICP备14008679号