关于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 ...
随机推荐
- 0x53 动态规划-区间DP
A: 石子合并 所求问题:1到n这些石子合并最少需要多少代价 由于石子合并的顺序可以任意,我们将石子分为两个部分 子问题:1到k这堆石子合并,k+1到n这堆石子合并,再把两堆石子合并,需要多少代价\( ...
- uni-app 从入门到放弃(持续更新)
https://blog.csdn.net/weixin_33940102/article/details/91460204
- 接口自动化复习第四天利用正则和faker提取替换变量值
在做接口自动化测试的时候,我们经常会遇到,有些字段利用随机生成数据就行了,不需要自己去构造测试数据.今天我就是要python中的第三方库faker来构造随机数,其次使用正则表达式来提取变量. 首先在接 ...
- excel如何自动获取本周工作日的日期显示作为标题(周一至周五)
一.背景: 每周发周报的标题格式为:本周一到本周五的日期内容,如下:但是每隔一周发送的时候需要改一下周报标题里面的日期,比较麻烦目前的需求是通过函数自动化生成,根据当前的日期去定位出本周一的日期以及本 ...
- C++ 覆盖写文件
写文件有三种模式: 截断写,文件打开之后立即清空原有内容 附加写,文件打开之后不清空原有内容,每次只能在文件最后写入 覆盖写,文件打开之后不清空原有内容,可以在文件任意位置写入 例如:文件原有内容为 ...
- 部署开源项目管理工具focalboard
前言 focalboard是一款开源项目管理工具,类似Jira.Trello.官网地址 组件 版本 说明 Debian 12.1 操作系统 docker 20.10.7 容器运行时 docker-co ...
- 【C++】类概念及使用
类定义中不允许对数据成员初始化 类外只能访问公有部分 类成员必须指定访问属性 类的成员函数是实现对封装的数据成员进行操作的唯一途径 类定义中不允许定义本类对象,因无法预知大小 类与结构形式相同,唯一区 ...
- 【面试题精讲】什么是websocket?如何与前端通信?
> 有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准`https://blog.zysicyj.top` [首发博客地址](https://blog.zysicyj.t ...
- CPU信息查看的工具
CPU信息查看的工具 背景 信创国产化如火如荼. CPU的型号其实越来越多 lscpu出来的结果其实太抽象, 对CPU的缓存架构显示不充分 今天在看大佬的文章是看到了一个工具: hwloc 感觉非常优 ...
- [转帖]shell脚本字符串截取的8种方法
https://www.cnblogs.com/zwgblog/p/6031256.html 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符 ...