总结:日志一定要写,日志一定要写,日志一定要写!

今天晚上是我学开发过程中很不一样的一晚,今晚学到了很多。

虽然我也只是一个开发的初学小白,今天的debug分享是我的一个小方法和一个小记录,如果大佬们有什么建议之类的,求指点~
debug一晚上,发现漏写一行导致代码段错误。


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

最后我只想说,开发一定不能偷懒,不能懒的打日志,不然后果很严重。

如果在编写代码的过程中真的遇到了问题,首先考虑的就是调试。

其次,可以通过慢慢打输出信息,打日志,来缩小报错的地方。

总结:日志一定要写,日志一定要写,日志一定要写!

关于debug一晚上的一些思考,做开发到底要养成什么习惯?的更多相关文章

  1. 软件project—思考项目开发那些事(一)

    阅读文件夹: 1.背景 2.项目管理,质量.度量.进度 3.软件开发是一种设计活动而不是建筑活动 4.高速开发(简单的系统结构与复杂的业务模型) 5.技术人员的业务理解与产品经理的业务理解的终于业务模 ...

  2. 转行做开发的Wiki:找好方向

    案 我是一个从建筑行业转行过来的后端工程师,转行来写代码了.最近发现经常有同学和网上的朋友问我一些转行的问题,零零散散地回答莫不如写一篇文章,以后回答此类问题就方便多了. 我的专业是给排水,属于非常传 ...

  3. Atitit.技术管理者要不要自己做开发??

    Atitit.技术管理者要不要自己做开发?? 1. 为什么很多管理者不能自己亲自做了1 1.1. 沟通成本多了1 1.2. .组织分散. 1 1.3. 会议多 .协调多 1 1.4. 问题的根源在于我 ...

  4. 从高处理解android与服务器交互(看懂了做开发就会非常的容易)

    今天帮一个朋友改一个bug 他可以算是初学者吧 .我给他看了看代码,从代码和跟他聊天能明显的发现他对客户端与服务器交互 基本 不是很了解.所以我花了更多时间去给他讲客户端与服务器的关系.我觉得从这个高 ...

  5. AppCan教你从零开始做开发

    经常收到类似这样的提问:新手开发APP,要怎么学?我有满屏幕的文档和视频,然而并没有什么卵用,因为我不知道该从哪看起……今天的主要内容是教大家,如何在AppCan移动平台创建应用,引擎插件选择.证书管 ...

  6. 如何实现 Https拦截进行 非常规“抓包” 珍惜Any 看雪学院 今天 前段时间在自己做开发的时候发现一个很好用的工具,OKHttp的拦截器(何为拦截器?就是在每次发送网络请求的时候都会走的一个回调)大概效果如下:

    如何实现 Https拦截进行 非常规“抓包” 珍惜Any 看雪学院 今天 前段时间在自己做开发的时候发现一个很好用的工具,OKHttp的拦截器(何为拦截器?就是在每次发送网络请求的时候都会走的一个回调 ...

  7. 关于使用Arduino做开发的理解

    转载自arduino中文社区 https://www.arduino.cn/thread-5414-1-1.html 见到很多人对Arduino的开发方法 .应用场景有误解,特别开个帖子说明下. 误解 ...

  8. 我都xxx岁了,还能继续做开发吗?

    前言 今天纯文字,阅读时间10分钟左右 最近在看一本书<大型网站技术架构:核心原理与案例分析>,可以说是非常枯燥的一本书,在开头几章讲解了网站的发展,介绍了一些架构中的常用名词.虽然有点枯 ...

  9. 【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[5]:调试 debug

    作者:Xuejie 原文链接:https://xuejie.space/2019_10_18_introduction_to_ckb_script_programming_debugging/ Ner ...

  10. Netty 源码阅读的思考------耗时业务到底该如何处理

    目录大纲: 前言 处理耗时业务的第一种方式-------handler 种加入线程池 处理耗时业务的第二种方式-------Context 中添加线程池 总结:两种方式的对比和思考 前言 熟悉 Net ...

随机推荐

  1. MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】

    MPI Maelstrom POJ - 1502 实验室有很多台计算机,由于每个人计算机的性能不同,导致计算机之间发送信息的速度不同,所以花费时间不同. 消息从第一台电脑发送到第二台电脑后,这两台电脑 ...

  2. 打破监控壁垒,棉花厂3D可视化建设让生产加工更加智能化

    前言 现在的棉花加工行业还停留在传统的反应式维护模式当中,当棉花加下厂的设备突然出现故障时,控制程序需要更换.这种情况下,首先需要客户向设备生产厂家请求派出技术人员进行维护,然后生产厂家才能根据情况再 ...

  3. 阿里云 Serverless 异步任务处理系统在数据分析领域的应用

    异步任务处理系统中的数据分析 数据处理.机器学习训练.数据统计分析是最为常见的一类离线任务.这类任务往往都是经过了一系列的预处理后,由上游统一发送到任务平台进行批量训练及分析.在处理语言方面,Pyth ...

  4. python代码打包exe程序

    1.安装pyinstaller 命令行输入:pip install pyinstaller 2.打包exe程序 输入命令:pyinstaller -F -w *.py(星号是.py的全部路径) pyi ...

  5. MyBatis_问题解决:Invalid bound statement (not found)

    Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是 ...

  6. canal报错nosuchmethod ..bytebuffer

    解决方法:更新jdk版本与es一致

  7. [转帖]【SQL SERVER】锁机制

    https://www.cnblogs.com/WilsonPan/p/12618849.html   锁定是 SQL Server 数据库引擎用来同步多个用户同时对同一个数据块的访问的一种机制. 基 ...

  8. [转帖]echo “新密码”|passwd --stdin 用户名

    https://www.cnblogs.com/rusking/p/6912809.html --stdin This option is used to indicate that passwd s ...

  9. [转帖]Pepper-Box - Kafka Load Generator

    https://github.com/GSLabDev/pepper-box Pepper-Box is kafka load generator plugin for jmeter. It allo ...

  10. [转帖]resin的安装与配置

    1.安装jdk 之前装过了,就不做演示了 vim /etc/profile   //注意java的配置文件 JAVA_HOME=/usr/local/jdk1.8/ JAVA_BIN=/usr/loc ...