No.14 程序调试

程序排错与程序开发是一个不可分割的整体,广义的程序开发包括程序调试,要正视程序排错

1. 程序的可调试性

  • 添加注释
  • 使用log
    • log4j:辅助程序调试;记录程序的运行日志
    • logger及其继承关系
      • 只有当方法的优先级高于/等于logger的优先级时才会输出
      • 如果程序没有显示地指定某个logger的level,将继承离他最近的祖先的level
      • 将logger的名字与它所在的类的全类名相同
        • logger继承体系与类的继承体系相同
        • 当控制某个包内的调试信息时,设置该变  以该 包名 为 名字的 logger的level即可
    • Appender和layout
      • Appender:输出到哪
      • layout:输出格式,怎么样个形式输出
    • 具体使用:参考http://www.cnblogs.com/leo-lsw/p/log4j2tutorial.html

2. 程序调试的基本方法

  • 编译器的代码审查
  • 跟踪执行流程(单步调试)
  • 断点调试
  • 隔离调试(整段注释,调试剩下的,推荐给每行添加单行注释,而非对整段多行注释)
  • 错误重现:有些错误比较隐蔽,不是每次都会出现。常见:多线程中,猜测后通过添加额外条件验证猜测,使得问题每次都能够出现,然后排错

3. 记录常见错误

  • 常用的了解
  • 搜索引擎

4. 程序调试的整体思路

  • 有错误信息是幸福的
  • 没有提示信息的排错
    • 分段调试:将程序分段,对每段进行分开调试(一般是log),逐个击破;确定范围,缩小范围,对缩小后的范围再分段,循环,找到问题所在
  • 分模块调试
  • 调试心态
    • 谁都会出错
      • 写和调本就是一个整体,没有不需要调的程序。调程序本身也不是个简单、轻松的事情。做好心理准备
    • 调比写更费时
      • 调试时间往往难以估计,如果碰到古怪问题的话
      • 难免产生烦躁 ;换个环境、心情调剂一下
      • “细活”,不是蛮力坚持可以解决的,保持头脑清醒;如果已经很长时间了,不如中断一下,恢复脑力、精力,往往有奇效。(跳出来的时候往往更清醒,更理智)

转载于:https://www.cnblogs.com/fang--/p/6193142.html

一文读懂Cache一致性原理 本文介绍了为什么需要维护cache一致性、一致性协议的本质和类别,以及如何设计一致性协议。 阅读详情

相关推荐

【Gradio】Gradio 启动规避 Huggingface 代理问题

国内访问Huggingface官方源常遇网络问题,可通过切换国内镜像提升下载速度。三种配置方式:1)设置HF_ENDPOINT环境变量;2)在from_pretrained中直接指定镜像参数;3)修改本地Huggingface配置文件。常用镜像包括hf-mirror.com、阿里云ModelScope和清华镜像源。注意镜像同步延迟、私有模型限制,建议配合huggingface-cli工具使用,必要时取消代理设置。合理配置镜像源可显著改善Huggingface生态使用体验。

Mr数据杨 815

Linux GDB 程序调试工具使用详解

GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能: 启动你的程序,可以按照你的自定义的要求随心所欲的运行...

CAESAR的专栏 375

Android-ttf.zip

Android字体,.ttf字体文件,可以用于Android中。本资源包含29种字体,任君选择。可以在Android应用中使用。这样可以丰富android应用的显示。

GDB程序调试工具参考知识

GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能: 启动你的程序,可以按照你的自定义的要求随心所欲的运...

我心依旧,明月长歌 6567

Linux GDB程序调试工具使用简介

Linux GDB程序调试工具使用简介 标签: linuxgdb调试 2016-04-01 18:38 1227人阅读 评论(1) 收藏 举报 分类: 综合性知识(28) 目录(?)[+] GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB

liufengl138的专栏 472

ST-Link之No Target Connected问题解决

一、背景:最近准备做个平衡车练练手(自己着实有些菜)。起初画板子的参考的别的原理图。好些地方没有特别注意。板子回来自己调试的时候遇到问题了。 问题:要驱动两个电机的编码器。编码器驱动只能使用定时器(通用定时器与高级定时器都具有编码器接口功能,而基本定时器6 7不具有此功能)的通道1和通道2。然而我画板子的时候,起重一个电机编码器接口接到了PB0 PB1(MCU STM32F103C8T6)引脚上,这两个引脚对应的是定时器3的通道3跟通道4.那显然不可以了。于是乎割线、跳线了呗。看了看只能跳到PB6与PB7引

Naunyang的博客 6万+

Linux笔记 程序调试gdb

1 调试准备 首先新建test1.c文件。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 5 int myfun(int a){

simple_a的博客 445

windows程序调试

调试策略 第一章 调试的过程 1. 成功而高效的调试的关键是找到准确的错误信息 2. 一旦找到一个错误,就可能找到更多。类似的代码可能还有类似的错误 3. 从错误中学习如何预防将来会产生的错误 4. 对于新代码,根本不需要执行测试来判断它是否有错误 第二章 编写便于调试的C++代码 C++语言和编程风...

SurpassLi的专栏 34

cpp教程5-张三思读博客 gdb调试详解 cpp程序调试

标题: gdb调试详解 作者: lx青萍之末 原文链接: https://blog.csdn.net/daaikuaichuan/article/details/89791255 扩充: 张三思 文章目录 一、gdb调试简介及常用命令 1、编译代码并启动gdb 2、调试选项 (1)查看源码(l) (2)设置断点(b) (3)运行程序(r) (4)执行下一句代码(n) (5)执行多句代码(c) (6)打印变量的值(p) (7)自动打印变量的值(display) (8)退出gdb(q) 3、调试选项总结

搜索引擎预备工程师 989

windows程序调试,转自谭文

调试策略 第一章         调试的过程 1.         成功而高效的调试的关键是找到准确的错误信息 2.         一旦找到一个错误,就可能找到更多。类似的代码可能还有类似的错误 3.         从错误中学习如何预防将来会产生的错误 4.         对于新代码,根本不需要执行测试来判断它是否有错误 第二章         编写便于调试的C++代码 C++

qq350625238的专栏 1265

从配置文件入手,彻底搞懂Prometheus的6大核心配置段(附实战案例解析)

本文深入解析Prometheus六大核心配置段,包括全局配置、数据采集、告警规则、远程读写等,通过实战案例展示如何构建高效监控平台。特别针对Grafana集成和部署优化提供专业指导,帮助开发者掌握云原生监控系统的配置精髓。

weixin_30565327的博客 420

golang学习系列——4. 程序调试

GDB 调试: 注意事项 1. golang1.3之后的版本,对于支持gdb调试存在很大的问题。产生这个问题的原因是,golang的runtime没有完整的被gdb支持。最新比较完整支持gdb调试的版本是golang 1.2.2,但是也有个别问题存在。 2. 在编译go程序的时候,需要关闭内联优化:** -gcflags “-N -l”**。可以在go get/build/test的时候指定...

night_crow的博客 1087

GDB程序调试

一、测试用程序#include<stdio.h> int main(){ int a = 1; int b = 2; int c = a + b; printf("c is %d",c); }二、生成可调试程序文件要想调试c/c++程序,需要在编译程序时,向生成的可执行文件中添加调试信息,编译时使用如下命令:gcc -g test.c -o test三、启动调试使用如

tterminator的专栏 480

AttributeError: module 'threading' has no attribute 'Thread'

/usr/local/bin/python2.7 "/Volumes/NO NAME/work/djangorestful_hui-master/tutorial/threading.py" Traceback (most recent call last): File "/Volumes/NO NAME/work/djangorestful_test-master/tutorial/thre...

由入门到精通 5680

GDB+GdbServer: ARM程序调试

arm-linux-gdb+gdbserver环境搭建以及远程调试 GDB+GdbServer: ARM程序调试 嵌入式arm linux环境中gdb+gdbserver调试 建立交叉调试环境 编译过程中碰到的问题: 嵌入式 编译gdb源码时出现“set but not used [-Werror=unused-but-set-variable]”问题的解决办 ...

weixin_30433075的博客 497

C语言程序调试成功0失败0,c语言——程序出现C4996:scanf 等错误的解决方法

c语言——程序出现C4996:scanf 等错误的解决方法(不用scanf_s替换解决)问题实例解决方法方法1方法2在VS编译器下,编写的c语言程序在调试编译时可能会出现c4996警告或错误此类的反馈信息,在此根据自己的实践经验总结出了几个可以解决此类问题的方法。以下通过具体的例子进行叙述。问题实例下面展示一段简单的代码`:int main(){int age = 0;printf("请输入你的年...

weixin_36050671的博客 1408

Linux下C++的编程——GDB进行程序调试

GDB简介我们在Linux下C++的编程——开偏介绍一文中已经简单介绍了GDB的功能,是类Unix系统的主要调试工具,可进行断点调试,跟踪程序,动态改变执行环境等功能。从一个程序开始调试下面我们就从一个程序开始讲解一下GDB的简单用法。

阳光日志 1万+

参数估计Picard迭代在非线性常微分方程参数估计中的应用研究(Matlab代码实现)

内容概要:本文系统研究了Picard迭代法在非线性常微分方程参数估计中的应用,深入阐述了该方法的数学原理及其在参数辨识中的收敛性与稳定性优势。通过构建最小化误差的目标函数,并结合数值积分技术,采用迭代方式逐步逼近系统的真实参数值,有效解决了非线性动态系统中因缺乏解析解而难以进行精确建模的问题。文中提供了完整的Matlab代码实现,涵盖模型定义、迭代求解、参数更新与结果可视化等关键环节,增强了方法的可操作性与工程实用性。研究通过典型非线性系统案例验证了算法的有效性,展示了其在科学计算与工程建模中的良好适应性与推广潜力。; 适合人群:具备常微分方程理论、数值分析基础及Matlab编程能力,从事系统建模、参数辨识、动力学仿真等相关方向的研究生、科研人员和工程技术开发者。; 使用场景及目标:①解决实际工程中非线性微分方程模型的未知参数估计问题;②深入理解Picard迭代法在科学计算中的实现机制与数值特性;③为学术论文复现、科研项目开发或课程设计提供可运行、易调试的技术方案与代码参考。; 阅读建议:建议读者结合文中的数学推导与Matlab代码逐行分析,重点关注迭代流程、目标函数构造与数值积分的耦合实现,通过修改模型结构或噪声条件进行扩展实验,以深化对算法鲁棒性与适用边界的理解。配套资源可通过指定公众号和网盘链接获取,推荐同步学习以加速科研进程。

上一篇: No.13 程序开发
下一篇: No.5 表达式中的陷阱
dingdi7404
博客等级 码龄9年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值