本文属于转载,原文地址如下:

https://blog.csdn.net/zhao4zhong1/article/details/53078924

一.码畜:靠编译器帮自己查语法错误

消灭笔误:编写适合程序员的键盘练习

if (常量==变量或表达式)

使用goto接力超长的if,switch

连续的if还是if elseif

多个条件的组合:精心的排版

多重括号的匹配

条件编译

各种const:不要纠结各种常量了,这个世界上唯一不变的就是变化。用APIWriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

查看宏展开后的.i文件:VC编译选项加/EP /P(项目、属性、配置属性、C/C++、预处理器、预处理到文件:是,预处理取消显示行号:是),重新编译,查看宏展开后对应的.i文件。gcc加-E

偶遇到莫名其妙的编译错误都是用“每次用/*...*/或#if 0...#endif注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”的方法解决的。

附加包含路径、附加库路径、附加依赖库的设置。

 

二.码农:靠调试器帮自己查逻辑错误

for/while语句后多余的分号

while/do while语句在语义上的歧义

条件断点

消息断点

数据断点

__asm int3或DebugBreak()断点

在内存窗口中观察数据的原始字节形态

Call Stack:崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!

递归函数关注以下几个因素

·退出条件

·参数有哪些

·返回值是什么

·局部变量有哪些

·全局变量有哪些

·何时输出

·会不会导致堆栈溢出

语法糖越甜,编译调试查错越苦!

C++的隐藏调用:单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。

任务管理器、VMMap、Process Monitor、Process Explorer、GDI泄露检测工具、……

三.码人:靠写日志帮自己查运营错误

CrashDump或Core的无力。

PDB的无力。

线上Debug的无力。

观察复杂数据的无力。

多线程调试的无力。

调试时序高度依赖代码的无力。

调试万年一遇非法数据的无力。

有时不将“调用函数名字+各参数值,进入函数后各参数值,中间变量值,退出函数前准备返回的值,返回函数到调用处后函数名字+各参数值+返回值”这些信息写日志到文件中是无论如何也发现不了问题在哪里的,包括捕获各种异常、写日志到屏幕、单步或设断点或生成core或dmp文件、……这些方法都不行!

 

四.码神:靠冥想和顿悟帮自己查不可再现错误

假死的各种原因:

·控制循环的变量的取值范围有符号/无符号,==/<=

·控制循环的变量没变

·控制循环的变量被外部程序修改

·各种资源泄露

·死锁

·网速变慢或网络资源耗尽或网络时通时断

·权限、UAC、杀毒软件实时防护

·操作系统或软件自动升级

·以为系统时间不可逆

·以为系统时间相关变量不会溢出(GetTickCount()约49.7天就归0了!)

·……

不要企图优雅的结束(因为这是不可能办到的)

而要在烂的不能再烂的摊子上也能重整河山!

如何debug?(转载)的更多相关文章

  1. jmeter sampler maven项目排错记

    eclipse 创建的maven项目,引入jar包之后出现红色叹号,一直找不到原因,连main方法都无法运行,提示找不到类: 错误: 找不到或无法加载主类 soapsampler.SoapSample ...

  2. JMeter调试工具--Debug Sampler(转载)

    转载自 http://www.cnblogs.com/fengpingfan Debug Sampler添加路径:[添加 / Sampler / Debug Sampler],面板设置如下: 打开JM ...

  3. Jmeter学习(三十二)调试工具Debug Sampler(转载)

    转载自 http://www.cnblogs.com/yangxia-test 一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug S ...

  4. java debug jdk(转载)

    Debug info unavailable 解决之道 从事Java的小伙伴们估计都有断点代码的习惯,可以很方便的查看运行期代码中一些变量的值. 但是JDK中有些类你会发现是无法断点的,即使你在IDE ...

  5. Eclipse 的 Debug 介绍与技巧【转载】

    没有任何程序员能够一气呵成的写出没有任何 Bug 的代码,所以很多程序员有相当一部分时间是花费在 Debug 上的,程序调试是每个程序员必须面对的工作.如何使用 Eclipse 进行有效的.尤其是高效 ...

  6. C++中debug和release的区别 . 转载

    vc中debug和release的不同 收藏  在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...

  7. debug和release转载

    Debug和Release区别 转自草原和大树 VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下 ...

  8. Debug.Assert vs Exception Throwing(转载)

    来源 Q: I've read plenty of articles (and a couple of other similar questions that were posted on Stac ...

  9. JMeter使用中遇到的问题:Jmeter Debug - "Unrecognized VM option '+HeapDumpOnOutOfMemoryError"(转载)

    转载自 http://www.cnblogs.com/yangxia-test 启动JMeter.bat的程序时,出现以下出错信息: Unrecognized VM option '+HeapDump ...

随机推荐

  1. 看了redis想一下

    redis总结 要想在python中使用redis,要先在本地安装redis,并开启redis-server,然后再导入python的redis包,pip install redis 怎么在Linux ...

  2. 理想中的 PCB 文件格式

    理想中的 PCB 文件格式 因为平时写代码使用 git,在画 PCB 也使用 git 来管理 PCB 文件. 但是 PCB 文件是二进制的,所以在比较时非常麻烦. 虽然 PCB 文件可以导出 文本文件 ...

  3. Oracle 12c RAC 日志体系结构的变化

    1    说明 在11g中,查看GRID的日志,会进入$ORACLE_HOM/log. [grid@cndba.cn ~]$ cd $ORACLE_HOME/log/ [grid@cndba.cn l ...

  4. 编译Lichee(FridenlyARM NanoPi-M1)碰到的问题及解决办法

    1. 提示libz.so.1找不到 需要在ubuntu上安装下面两个包: sudo apt-get install lib32ncurses5 ia32-libs 2. 提示xt_hl.o没有make ...

  5. golang的interface到其他类型的数据转换

    以string为例 package main import "fmt" func main() { var a interface{} var b string a = " ...

  6. 单例---被废弃的DCL双重检查加锁

    被废弃的单例的DCL双重检查加锁/* *单例模式 *单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点. *加同步锁的单例模式,适合在多线程中使用. */ class Singleton{ ...

  7. 杂项:NoSQL

    ylbtech-杂项:NoSQL NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站 ...

  8. idea 破解代码

    下面是idea的破解方法,手动执行对应的main方法即可.亲测Idea 14 完美破解~~废话少说,上代码... package com.jd.serializable; import java.ma ...

  9. MySQL重启端口被占用处理

    1,查看日志的ERROR 2018-05-23T01:26:59.230382Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set. 201 ...

  10. 使用SpringData出现java.lang.AbstractMethodError

    最近学习一下SpringData,在添加SpringData支持的时候,出现了这样的问题: SpringData需要的jar有:spring-data-jpa.jar  spring-data-com ...