调式程序的方法

前言

你有没有曾经调式某段代码时,总觉得世界上有鬼?

你有没有曾经调式API时,总感觉是调用第三方的接口问题或者文档说明不对?

你有没有曾经调式一个bug时,总感觉问题的来源是使用的方式不对?

你有没有在安装一个服务时,总感觉文档或者环境不相符合?

相信过程和方法,切勿被结果误导............

概述

调式代码很多时候类似于查案一样,只是结果的重要程度不同,警察查案为的是人民安稳,而我们调式则是为了系统的安稳。既然这样我们就不要冤枉任何一段代码和程序,以免他们受到不合理的惩罚。

以下的一些过程方法都来自于个人的总结,从个人角度说前人的一些方法都是经过长期的经验积累,当然参考性理论性都比较强,而作为个人的方法,则可能更适合像我等DS。

测试方法

代码过程式调式方法

代码调式首先要注意的是过程,你必须要理清楚导致最终结果的思路,也就是作案的过程,从作案过程中的一步步跟进得到作案结果。在作案过程分析中对于每一个疑点都必须打上标记(也就是代码中所提到的log信息)。经过这样的分析过程后,再进行黑盒测试,添加输入,验证结果。最终根据每一步的标记来验证你的判断,从而找到原因。

以上的方案是一种过程式的调式方式。这种方式的优点不言而喻,直接可以通过一个测试就可以分析清楚整个过程,但是这种方式很耗时间,理清楚自己的代码逻辑尚可,而想要理清楚他人逻辑代码则可要难于上青天。

单元测试调式方法

单元测试的基本目的是保证某个函数、类或者某个功能模块的正常运作,包括其异常情况的测试验证。而作为程序员最喜欢的验证方式莫过于“打桩”(打桩的含义就是提供假默认数据),这种方式调式起来非常方便,但是有一个不利的地方就是无法再次利用,因为在我们验证正常以后,很多开发人员都会将其注释或者删除,因此如果我们在开发环境开发完成,但我们希望在测试环境验证时,则必须又要重新写一篇打桩逻辑,那么这样看,到现网时,则会更加的麻烦。既然这么多不便,你可以尝试下面的做法。

添加一个单元测试类,这个类需要控制其权限,只有通过后台登录或者是命令行才可以执行,该类承载的作用就是对系统的关键逻辑进行检测,并且做出相应的测试输出结果。要相信所有的接口类都是可以通过单元测试类去完成测试的。很多时候程序员在质疑,这件事情是不是应该我们做?其实还真是需要我们去做,毕竟很多测试现在做的都是黑盒测试。

这种调式方法适合在开发过程中,并且可以保证我们现网的代码发布后运行正常。希望大家在计划开发时间时也将该过程并于开发阶段。

快速定位法

前面两个那么复杂的过程太理想化了?我的代码就只有100行,并且系统也不复杂。如果是这样的话,那么就快速的进行定位分析。很多时候会遇到

1、输入正常,输出异常;

2、输入正常,逻辑异常,输出异常;

3、输入异常,逻辑正常,输出正常;

4、输入异常,逻辑异常,输出无。

在个人的开发过程中,我经常会遇到上面的某种类型的问题,比如在Node.js开发过程中,遇到string.length提示string没有length方法。当时就昏头的在问自己,为什么其他string都有length方法,为什么这个就没有呢?应该很多同学都知道问题就在于这个string根本就不是string,只是说你自己把它理想化为string了,也就是你输入的本来就有问题。那么定位这个问题的最好办法就是打印输入,打印输出即可。

可能其他的程序没有这么简单,但是最基本的就是在主函数中的会遇到异常的函数都进行输入输出判断,那样就可以快速的定位。

切记:不要断章取义,自以为是。

上面的方法以及过程都只是基于PHP或者Node.js总结出来的,对于C & C++可能存在相似或者相异处。不喜勿喷,且看且珍惜吧。

Danhuang博客留住感动:blog.lovedan.cn

调式程序的方法

时间: 2024-10-26 01:28:34

调式程序的方法的相关文章

调试 Android* x86 应用程序的方法以及要使用的工具

作者:Xiaodong Wang 1.简介 众所周知,Android* 开发人员头顶许多称呼:设计员.程序猿等,并且通常会不可避免地被称为故障检修工.代码中的错误无法避免,因此无论您是否一开始就造成错误,了解调试工具以及如何迅速而有效地跟踪并解决错误都很重要.鉴于此,如今的 Android 开发人员必须掌握有效的调试技巧.本文提供了 Android 应用程序调试工具的简单教学,用于帮助 Android SDK 以及相关工具的新手迅速入门,并在 Android x86 平台上更有效地解决故障. 2

C#中WinForm程序退出方法技巧总结(转)

本文实例总结了C#中WinForm程序退出方法技巧.分享给大家供大家参考.具体分析如下: 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0); 等他们各自的方法不一样,下面我们就来详细介绍一下. 1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退

嵌入式linux应用程序调试方法

嵌入式linux应用程序调试方法 四 内存工具 17 4.1 MEMWATCH 17 4.2 YAMD 22 4.3 Electric Fence 24 五 C/C++代码覆盖.性能profiling工具 24 5.1 用gcov来测试代码覆盖率 25 5.2 使用gprof来优化你的C/C++程序 35 四 内存工具 您肯定不想陷入类似在几千次调用之后发生分配溢出这样的情形. 许多小组花了许许多多时间来跟踪稀奇古怪的内存错误问题.应用程序在有的开发工作站上能运行,但在新的产品工作站上,这个应用

Windows(64位IIS)未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 解决方法

环境:windows server 2008r2 64位  IIS access 2003 问题:Windows(64位IIS)未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 解决方法:网上找的 在Windows 7(32位)用.Net开发的Excel导入数据表功能,测试后一切正常,站点发布挪到Windows Server 2008(64位)上就意外了,出现错误提示,运行程序,抛出异常:未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序

海典ERP与汉码盘点机对接门店实时盘点计划及程序使用方法,实时盘点,云盘点方案

1.     PDA手持设备按键说明 [Tab]键:使输入焦点在控件上切换. [ESC]键:弹出是否退出确认对话框,退出操作界面或程序. [OK]键:确认输入或选择,进入下一步操作. [C]键:删除键,或者回退上一步操作. [#]键:快速切换和隐藏/显示输入法对.通过[#]号键可以在各种输入法之间进行切换. 2.     门店盘点前准备工作 2.1.  登记帐存并生成盘点单号和盘点页码(在ERP管理软件中) 1.       在ERP医药管理软件上进行盘点登记:注:每次盘点之前首先要对将要盘点的

在Linux中定时执行一个程序的方法之at命令

/*********************************************************************  * Author  : Samson  * Date    : 04/29/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

FPGA的EPCS 配置的2种方法 FPGA下载程序的方法(EPCS)

使用主动串行配置模式对Cyclone FPGA进行配置前,必须将配置文件写入串行配置器件EPCS.将配置文件写入EPCS的方法有三种: (1)在Quartus II的Programmer中,通过专门与EPCS连接的AS下载接口下载.pof文件到EPCS.不同之处在于将下载线连接到AS接口而不是JTAG接口,选择编程文件时是*.pof而不是*.sof. (2)在Quartus II的Programmer中,使用JTAG接口通过FPGA中间通道间接对EPCS进行编程. (3)使用Nios II ID

发布Qt Quick桌面应用程序的方法

发布Qt Quick桌面应用程序的方法 Qt是一款优秀的跨平台开发框架,它可以在桌面.移动平台以及嵌入式平台上运行.目前Qt 5介绍程序发布的文章帖子比较少.大家又非常想要知道如何发布Qt应用程序,于是我花了一点儿时间介绍一下如何发布Qt桌面应用程序. 上海萌梦信息科技有限公司(微博:http://weibo.com/qtdream)原创文章,首发地址:http://qtdream.com/topic/114.欢迎同行前来探讨. 上篇文章介绍了如何简单快速地发布Qt Widgets应用.目前Qt

C#中WinForm程序退出方法技巧(转载)

原文链接:http://www.jb51.net/article/58816.htm 本文实例总结了C#中WinForm程序退出方法技巧.分享给大家供大家参考.具体分析如下: 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0); 等他们各自的方法不一样,下面我们就来详细介绍一下. 1.this.Close();   只是关闭当前