首先声明,以下有些是自己遇到的问题自己解决了,其它里面包括了网上看到的Debug经验和书里看到的经验,时间问题就不一一说明,如有侵权,私信我进行删除,我会道歉。我写这个的本意是记录我学习中遇到的问题,冒犯之处多多包涵。

1.加界定符对注释引起的不知名错误。

1.最好在加了这种注释后马上编译一次,不然出错就找不到原因了。

2.“无法解析函数重载”

1.漏掉第二个输出运算符,特征是在你漏掉的运算符处报error,说漏了分号。

2.如果是cout处的运算符漏了,error会说该运算符无法解析函数重载

3.无法查找或者打开PDB文件以及运行框一闪而过

1.启用源服务器支持和Microsoft符号服务器;return语句前加上 system(“pause”)

4.与数字有关的循环

1.直接用输出语句输出b+1,得到结果3(b=2),并不意味着b等于3!

2.不要随意在while、if中定义变量——详见(5)自定义数据结构再探

5.死循环

1.判断语句中的b==1写成了b=1,使判断始终为真。

6.未定义标识符报错

1.字符串字面值常量的两侧漏掉引号,此时输出的字符作为未定义标识符报错

2.C++中每个名字都要先声明后使用,名字声明失败也会错误,error信息是未定义标识符xx之类

3.优先级、结合方向、执行顺序的关系。详细见文章http://m.blog.csdn.net/sxhelijian/article/details/17276879,用该文章最后一段话总结为:在一个句子里面,只做一件事。复杂的表达式必须保证被修改的变量不会再被当前语句应用。否则会出现undefined结果,编程的时候应该尽量避免这种编程风格。

7.x不是x类型

变量初始化或者赋值错误

8.未初始化变量

1.定义在函数内部的内置类型默认是未初始化的,除非有显示的初始化语句,试图用一个未初始化的类型是错误的。

2.初始化方式错误引起的错误

初始化有好几种方法:int a=0、int a(0)、int a=(0)、int a{0},之间有区别,找到了文章,但是目前看不懂:

https://zhuanlan.zhihu.com/p/21102748?utm_source=qq&utm_medium=social

3.全局作用域的内置类型对象初始化为0(自定义类则由该类决定——类在定义时有类内初始值);局部作用域的对象未被初始化即拥有未定义的值。

9.变量值超过范围

10.无符号和有符合类型引起的编译错误

1.编译器不同引起的。

11.类型自动转换

12.不同的移植性与依赖环境

1.无法预知的行为源于编译器无须(有时是不能)检测的错误,即使编译通过,程序执行了未定义的表达式,也会产生错误。

2.含有无法预知行为的程序在某种情况下也能正确执行,但我们却无法保证其在别的编译器下能正常工作,甚至本来能执行的再次执行也会出错。且不能认为一组输入有效,另一组输入也有效。

3.把int尺寸看成固定值的这类程序称为不可移植的,当这种程序移植到别的机器就可能发生错误。

13.数值前后不一致

1.数值转换为二进制存储时是以近似值存储的。

14.用log输出运行日志进行Debug

15.警告:需要收缩转换

1.丢失信息的赋值,比如double a=3.12,int b=a。

16.无法预计的错误

1.试图拷贝或从其他方式访问无效指针的值。(编译器不负责检查此类错误)

2.空指针和指向紧邻对象所占空间的下一个位置的指针,试图访问它们是不被允许的。

17.提示返回类型错误

1.类定义体后面的分号缺失:

#include <iostream>
struct Foo{}
int main()
{
return 0;
}
/*
*错误C2628:“Foo”后面接“int”是非法的(是否忘记了“;”? )
*错误C3874:“main”的返回类型应为“int”而非“Foo”
*错误C2440:“return”: 无法从“int”转换为“Foo”
*/

  

18.关于未定义行为-要注意书中明确说的语言未定义行为

C++标准也有很多未定义的行为,即交给编译器自己去决定。而这个时候就会出现编译器设计人员理解不同的情况了,于是就会有不同编译器不同表现行为。然而,很多时候程序员往往会以他熟悉的编译器作为基准,若其它编译器与这个编译器表现不一致就说其它编译器有Bug,不符合标准,这其实是一种误解。很多时候,其它编译器在某个平台上的策略是尽量兼容这个平台的主流编译器,如编译选项,C++ Object Model等,所以我们经常会看见在Linux平台下的编译器都会宣称是否兼容GCC编译器,或者说兼容了GCC编译器多少。而在Windows平台下,则是是否兼容VC++编译器,如Intel C++编译器就是一个例子。

作者:蓝色
链接:https://www.zhihu.com/question/39464157/answer/82372401

Debug技巧(1)的更多相关文章

  1. windows内存debug技巧

    A) c++ memory/heap corrupt debug 技巧 1. catch first exception2. data breakpointVC tell us some addres ...

  2. gdb调试的艺术——Debug技巧

    调试的艺术——Debug技巧总结 (本文从写好的wiki里粘出来的,格式稍乱不影响阅读) 用Q+编号代表问题,A+编号代表答案.用这种方式组织.如无特别说明,这些技巧都是针对Visual Studio ...

  3. JS调试必备的5个debug技巧_javascript技巧

    JS调试必备的debug调试javascript技巧 1. debugger; 我以前也说过,你可以在JavaScript代码中加入一句debugger;来手工造成一个断点效果.需要带有条件的断点吗? ...

  4. 调试 & 常数优化:我有特别的 debug 技巧

    rxz 的调试技巧(https://www.zhihu.com/question/60719584/answer/179363450): #define DEBUG printf("Pass ...

  5. 要当好JavaScript程序员:5个debug技巧

    我一直使用printf调试程序,一般来说都是比较顺利,但有时候,你会发现需要更好的方法.下面几个JavaScript技巧相信你一定会觉得十分有用: 1. debugger; 我以前也说过,你可以在Ja ...

  6. JS调试必备的5个debug技巧

    我一直使用printf调试程序,一般来说都是比较顺利,但有时候,你会发现需要更好的方法.下面几个JavaScript技巧相信你一定会觉得十分有用   1. debugger; 我以前也说过,你可以在J ...

  7. Maven之debug技巧

    mvn eclipse:clean eclipse:eclipse -Dwtpversion=2.0 可以将项目编译为web项目,然后再项目上右键debug as server即可.

  8. java Eclipse debug技巧

    摘要:调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试 ...

  9. Android Input设备debug技巧

    一.驱动层 检查是否有点上报 adb shell getevent -l /dev/input/eventX 检查input设备支持的属性值 adb shell getevent -i /dev/in ...

  10. Eclipse常用的6个Debug技巧

    1. Ctrl+Shift+i: Person father = new Person(); father.setName("father"); System.out.printl ...

随机推荐

  1. sata express接口

    华硕z97主板的sata express接口目前没什么用,但随着电脑接口的发展,可能会占据一席之地. 1.顾名思义,SATA-Express是SATA接口 + PCI-Express的混合体,其理论带 ...

  2. node-npm/yarn

    很多人对npm或yarn了解甚少吧,下面我介绍一下常用的yarn/npm所谓的包管理工具. 首先我先介绍一下,npm属于国外Google镜像(下载贼慢),yarn属于Facebook开发的. npm: ...

  3. openwrt-安装-驱动-应用-lcd2004a实验

    1. 板子f403tech的RT5350的板子和 (1)openWRT系统的定义和特点         OpenWrt是一个高度模块化.高度自己主动化的嵌入式Linux系统.拥有强大的网络组件.经常被 ...

  4. python 时区

    Python中的时区处理  http://tech.glowing.com/cn/dealing-with-timezone-in-python/ Python时区设置方法与pytz查询时区教程_py ...

  5. Delphi7目录结构

    Delphi7目录结构 打开Delphi的安装目录,如C:\Program Files\Borland\Delphi7,你将会看到目录下包含了一些文件和文件夹:Source:存放的是Delpi提供的所 ...

  6. HDU 5371(2015多校7)-Hotaru&#39;s problem(Manacher算法求回文串)

    题目地址:HDU 5371 题意:给你一个具有n个元素的整数序列,问你是否存在这样一个子序列.该子序列分为三部分,第一部分与第三部分同样,第一部分与第二部分对称.假设存在求最长的符合这样的条件的序列. ...

  7. Bootstrap tabs 源码分析

    前言: 阅读建议:去github下载一个完整dom然后把,本篇代码复制进去然后运行就好了以地址 tab组件是非常简单的一种组件,因为这是一个系列,所以就顺便看了,其实它写的这个还算不错的,很有条例,也 ...

  8. Codeforces Round #228 (Div. 2) C. Fox and Box Accumulation

    C. Fox and Box Accumulation time limit per test 1 second memory limit per test 256 megabytes input s ...

  9. scapy基础-网络数据包结构

    网络层次模型,数据包的组成是学习scapy的基础,下文主要关注模型中各个层次的用途,ethernet II和ip包数据结构.    1.五层模型简介 名称 作用 包含协议 应用层 面向程序对程序的传输 ...

  10. Ural1099 Work Scheduling 一般图的最大匹配

    Ural1099 给定无向图, 求最大匹配. 在寻找增广路的过程中,可能出现一个奇环,这时候把奇环收缩,成为一朵“花”,并在新图上继续增广. 为了记录匹配关系,需要在花中寻找路径,每一条增广路径都可以 ...