这篇文章给大家分享的是有关c++代码调试的小技巧的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
代码调试在程序开发阶段占有举足轻重的地位,可见代码调试的重要性。但是有一点必须强调:程序是设计出来的,而不是调试出来的。这是所有程序员必须牢记在心的一条准则。一个没有设计或者这几得很糟糕的程序,无论怎样调试,也不会成为一个合格的程序。
程序有着良好的设计的前提下,软件开发的过程中,编码错误在所难免。所有程序可能出现的错误可分为两类:语法错误和逻辑错误。调试通常是指在消除了语法错误之后,发现程序中的逻辑错误的过程。对c/c++程序进行调试,有这样集中常用的手段。它们既可以单独使用,也可以配合使用。
<强> 2.1使用打印语句强>
这是最朴素,也是最直接的方法。程序的运行可以看成是一组变量(状)态不断变化的过程,这个过程就是数据处理的过程。如果程序的最终结果不对,那么我们必须考虑这一组状态什么时候出现了问题,而查看中间结果就成了一种最有效的手段。
因此,不要过分迷信功能强大的调试工具。在大部分情况下,程序出现的问题都是一些小问题。而正是这些小问题,却造成了大麻烦。程序员可以通过对最有可能出错的代码附近使用简单的printf()语句或cout<& lt;…语句来输出中间结果,查看异常情况。
<强> 2.2使用调试标记强>
在调试程序的时候使用相应的辅助代码(如输出中间结果等),在调试完成之后隐藏这些代码,是一种常用的调试策略。
这种策略可以借助于#定义,# ifdef, # endif这三个与编译指令来实现。具体地说,就是在调试程序的时候,利用编译器的命令行参数定义调试标记(相当于程序中用# define定义的宏),然后再# ifdef和# endif之间包含相应的调试代码就可以了。当程序最终调试完成后,在生成发行版时,只要在编译器命令行参数中不再提供调试标记,程序中的调试代码就会消失。常用的调试标记为_DEBUG(在vc++ 2012)中,编译器调试版的程序是会缺省定义宏_DEBUG。考察如下程序。
# include & lt; iostream> 使用名称空间性病; int main () { int i=5; # ifdef _DEBUG cout<& lt; i<& lt; endl; #endif cout<& lt;“Hello World !“& lt; & lt; endl; }
在调试程序的时候,会执行# ifdef和# endif之间的语句。当调试完成之后,由于调试标记_DEBUG失去定义,从而隐藏调试代码。
<强> 2.3使用调试变量强>
与使用调试标记的方法类似,可以在运行时设置一个供调试用的bool型变量,它的值决定了特定调试代码的开放和关闭,并且可以通过程序的命令行参数来控制该变量的开关。上面的程序经过修改如下。
# include & lt; iostream> # include & lt; string> 使用名称空间性病; bool调试; int主要(int命令行参数个数,char * argv []) { int i=5; (int j=0; j<命令行参数个数;+ + j) { 如果字符串(argv [j])==?知道;调试) { debug=true; } } 如果(调试) { cout<& lt; i<& lt; endl; } cout<& lt;“Hello World !“& lt; & lt; endl; }
程序通过命令行启动时,只要在命令行参数中指明debug=,就可以输出调试信息。否,则只是输出程序”正常“运行的部分。这样就具有较高的灵活性。
<强> 2.4使用内置的调试宏强>
在程序调试的过程中,经常希望知道当前运行的是哪个模块小的哪个函数,在源文件中是第几行等等。如果手工添加这些信息,无疑会给程序员带来很大的负担,因此,c++提供了几个宏,他们分别是<代码> __FILE__ 代码>,<代码> __FUNCTION__ 代码>和<代码> __LINE__> 代码,可以利用它们“自动”获取有关模块,函数和行的信息。考察如下程序。
# include & lt; iostream> 使用名称空间性病; 空白func1 () { cout<& lt; __FILE__<& lt; endl; } 空白func2 () { cout<& lt; __FUNCTION__<& lt; endl; } 空白func3 () { cout<& lt; __LINE__<& lt; endl; } int主要(int命令行参数个数,char * argv []) { func1 (); func2 (); func3 (); }
在本人的机器上输出如下信息:
e: \ 2015.10.23 \ \ lvlv_study \ synchronousfile \学校编程\调试\ main.cpp
c++代码调试的小技巧