关于debug一晚上的一些思考,做开发到底要养成什么习惯?
总结:日志一定要写,日志一定要写,日志一定要写!
今天晚上是我学开发过程中很不一样的一晚,今晚学到了很多。
虽然我也只是一个开发的初学小白,今天的debug分享是我的一个小方法和一个小记录,如果大佬们有什么建议之类的,求指点~
debug一晚上,发现漏写一行导致代码段错误。

编写tcp网络服务器,因为为了可维护性,代码高度封装,还是多线程的。
除此之外,序列化反序列化的规则也是自己代码定义的,没有使用现成的代码。
今天测试的时候,发现客户端发送请求之后,总是报段错误
讲道理这些运行时错误真的太恶心了,什么都不说,就来个Segmentation fault(不过搞后端的人看到这个也习以为常了吧~)。
一开始看到这个错误我还觉得没啥事,小问题,反正也不是第一次见了。我猜可能是序列化反序列化的时候字符串操作有误,但是检查好久都没又发现错误。
而且这个错误特别奇怪,客户端崩了之后,服务端也会跟着崩,我真的就懵逼了。
我客户端和服务端有什么关系啊,按道理来说半毛钱关系也没有。然后我就怀疑是服务端有bug导致客户端崩溃,这样比较合理(服务端崩一般都不会影响客户端的),然后我又去写了一个debug的函数,让线程都去执行debug,然后用centos自带的telnet去测试服务端,发现没问题啊!我裂开了,搞半天还是客户端的问题,不过问题也进一步缩小了,是客户端的问题。
现在我又把眼光集中序列化反序列化上,还是没有检查出问题。此时已经过去了40min了。最后还是疯狂打日志,疯狂打印输出结果。最后发现是因为Recv的封装函数忘记返回了!居然犯这种错误。
最后我只想说,开发一定不能偷懒,不能懒的打日志,不然后果很严重。
如果在编写代码的过程中真的遇到了问题,首先考虑的就是调试。
其次,可以通过慢慢打输出信息,打日志,来缩小报错的地方。
总结:日志一定要写,日志一定要写,日志一定要写!

关于debug一晚上的一些思考,做开发到底要养成什么习惯?的更多相关文章
- 软件project—思考项目开发那些事(一)
阅读文件夹: 1.背景 2.项目管理,质量.度量.进度 3.软件开发是一种设计活动而不是建筑活动 4.高速开发(简单的系统结构与复杂的业务模型) 5.技术人员的业务理解与产品经理的业务理解的终于业务模 ...
- 转行做开发的Wiki:找好方向
案 我是一个从建筑行业转行过来的后端工程师,转行来写代码了.最近发现经常有同学和网上的朋友问我一些转行的问题,零零散散地回答莫不如写一篇文章,以后回答此类问题就方便多了. 我的专业是给排水,属于非常传 ...
- Atitit.技术管理者要不要自己做开发??
Atitit.技术管理者要不要自己做开发?? 1. 为什么很多管理者不能自己亲自做了1 1.1. 沟通成本多了1 1.2. .组织分散. 1 1.3. 会议多 .协调多 1 1.4. 问题的根源在于我 ...
- 从高处理解android与服务器交互(看懂了做开发就会非常的容易)
今天帮一个朋友改一个bug 他可以算是初学者吧 .我给他看了看代码,从代码和跟他聊天能明显的发现他对客户端与服务器交互 基本 不是很了解.所以我花了更多时间去给他讲客户端与服务器的关系.我觉得从这个高 ...
- AppCan教你从零开始做开发
经常收到类似这样的提问:新手开发APP,要怎么学?我有满屏幕的文档和视频,然而并没有什么卵用,因为我不知道该从哪看起……今天的主要内容是教大家,如何在AppCan移动平台创建应用,引擎插件选择.证书管 ...
- 如何实现 Https拦截进行 非常规“抓包” 珍惜Any 看雪学院 今天 前段时间在自己做开发的时候发现一个很好用的工具,OKHttp的拦截器(何为拦截器?就是在每次发送网络请求的时候都会走的一个回调)大概效果如下:
如何实现 Https拦截进行 非常规“抓包” 珍惜Any 看雪学院 今天 前段时间在自己做开发的时候发现一个很好用的工具,OKHttp的拦截器(何为拦截器?就是在每次发送网络请求的时候都会走的一个回调 ...
- 关于使用Arduino做开发的理解
转载自arduino中文社区 https://www.arduino.cn/thread-5414-1-1.html 见到很多人对Arduino的开发方法 .应用场景有误解,特别开个帖子说明下. 误解 ...
- 我都xxx岁了,还能继续做开发吗?
前言 今天纯文字,阅读时间10分钟左右 最近在看一本书<大型网站技术架构:核心原理与案例分析>,可以说是非常枯燥的一本书,在开头几章讲解了网站的发展,介绍了一些架构中的常用名词.虽然有点枯 ...
- 【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[5]:调试 debug
作者:Xuejie 原文链接:https://xuejie.space/2019_10_18_introduction_to_ckb_script_programming_debugging/ Ner ...
- Netty 源码阅读的思考------耗时业务到底该如何处理
目录大纲: 前言 处理耗时业务的第一种方式-------handler 种加入线程池 处理耗时业务的第二种方式-------Context 中添加线程池 总结:两种方式的对比和思考 前言 熟悉 Net ...
随机推荐
- Codeforces Round #629 (Div. 3) & 19级暑假第六场训练赛
A:Codeforces 1328A Divisibility Problem 整除+模 Input 5 10 4 13 9 100 13 123 456 92 46 Output 2 5 4 333 ...
- Spring EL 表达式
本篇讲述了Spring Expression Language -- 即Spring3中功能丰富强大的表达式语言,简称SpEL. SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复 ...
- 三、swift大对象--动态大对象
系列导航 一.swift对象存储环境搭建 二.swift添加存储策略 三.swift大对象--动态大对象 四.swift大对象--静态态大对象 五.java操作swift对象存储(官网样例) 六.ja ...
- 《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接
链接( Clinking)是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行.链接可以执行于编译时( compile time),也就是在源代码被翻译成机器代 ...
- nextTick使用
- C++ Lambda 表达式递归写法
今天看到一篇博客介绍使用 Lambda 表达式递归计算 n!.使用了 C++14 的 generic lambda,给 Lambda 表达式加了一个模板参数,在函数调用的时候将 Lambda 表达式作 ...
- java项目实践-jsp-filter-监听器-day19
目录 1. jsp 2. 过滤器 3. listener 监听器 1. jsp servle逻辑处理方便 html页面表现麻烦 jsp 页面表现方便 但是逻辑处理麻烦 JSP 是一种页面技术 JSP本 ...
- 解决python报错:ModuleNotFoundError: No module named '_sysconfigdata_x86_64_conda_linux_gnu'
技术背景 在上一篇博客中执行过conda的更新以及用conda安装了gxx_linux-64之后,再执行pip的一些指令时,就会给出如下所示的报错: $ python3 -m pip list Tra ...
- SV 接口
概述 接口 main bus有很多信号线 verilog会先将模块的输出信号拉出来,然后再将其连接到其他模块,进行不同模块之间的连接比较麻烦且容易出错 interface - 将端口封装到接口中 接口 ...
- CAP-BASE