专栏首页杂烩程序eclipse下run和debug不一致问题

程序eclipse下run和debug不一致问题

    公司核心代码,这里不上了,主要将如何发现问题、如何排查问题和如何解决问题。

    如何发现的?

    公司运营提出新需求,说系统不好用,于是开始优化。优化完上线后,偶发的发现程序输出的结果不对,于是赶紧下线回滚。把代码跑起来,eclipse里打断点,但结果是没问题啊。试了好几次,都是正常。取消断电,再跑,问题复现了。

    如何排查的?

    刚开始有点懵,这怎么搞?问了下度娘,五花八门说什么的都有。没办法,还是用最老的办法吧,每个一句代码,打印一次log,输出那一句代码用到的变量。最后把debug下的输出复制到文件对比工具中,在把run下的输出复制到文件对比工具中。一对比,现原形了。

    如何解决的?

    现了原形,这就好办了。原型是啥呢,就是发现for循环中有个数据库查询,第一次循环的时候,查询id为1,将结果存在一个map里,并做了逻辑判断,然后又往里面塞了点东西。然后第二次循环的时候,查询id为2,同样将结果存在一个map里,但这个时候,这个map竟然包含了第一次循环的时候,那个map里额外塞的参数!这就影响了后续的程序判断,导致结果异常,而且打断点后这个问题又不见了!这时,想到度娘的一句话:Debug时内存会初始化,但运行时不会。难道第二次循环查询存储结果用到的是第一次的map?

    于是在程序里去用==判断了一下,发现果然是一个。这就很奇怪了,追查spring和mybatis的源码,甚至到jdk也没找到一点能够说服人的依据。回到程序代码调用查询地方,修改原来直接rerurn session.selectOne();的代码,先new一个map,然后map.putAll进去,保存,重启,问题解决了。

    为什么会这样?我在其它项目怎么都无法复现出来,再此记录,留到以后解决。但避免这类问题的根本办法,就是管理好对象,用到再创建,创建时指定初始值。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • centos7安装ganglia 原

    ganglia分三个部分,gmond,gmetad、gweb。gmond是安装到每一台机器,负责收集数据。gmetad不用安装到每一台,他负责接收gmond收集...

    尚浩宇
  • 解决KafkaOffsetMonitor页面不展示问题

        今天安装最新版KafkaOffsetMonitor-assembly-0.2.1,发现安装完成后页面加载缓慢,并且最终显示不出任何东西,查看consol...

    尚浩宇
  • log4j集成kafka配置文件不生效问题解决

        日志采集使用KF,即kfka+flume,有程序直接输出到kafka,flume拉取存储到文件或 elasticsearch中,但是发现第一次启动程序时...

    尚浩宇
  • Basemap工具函数(1)

    添加一个经度值到经度数组中,并且添加一列值到数据数组中。当数据覆盖全部经度时,非常有利于添加缺省值。

    bugsuse
  • Go 语言基础--map 浅析

    map通常是一种无序键值对的集合,map存在的意义主要是利用map的结构根据key来快速检索数据,在go中也是这样的。 map 也是一种集合,我们可以像遍历数...

    邹志全
  • Golang 语言--map 用range遍历不能保证顺序输出

    按照之前我对map的理解,map中的数据应该是有序二叉树的存储顺序,正常的遍历也应该是有序的遍历和输出,但实际试了一下,却发现并非如此,网上查了下,发现从Go1...

    李海彬
  • Arcgis for JS之地图自适应调整

    概述:本节讲述的内容为当浏览器大小发生变化或者地图展示区域的大小发生变化时,地图的自适应调整。地图的自适应常见于以下几种情况:1、系统中有收缩或者全屏的按钮;2...

    lzugis
  • Go语言:map使用笔记

    Go 的 map 是 hash map; C++ 的 map 是 tree (主流实现是红黑树); C++ 的 hash map 是unordered_ma...

    linjinhe
  • python3的一个奇怪设计--map

    这个改动真是太不正常了,ruby、js和lisp都没这么干的。我也没搞懂这样做有什么好处?

    py3study
  • 推荐6-Go maps in action 翻译

    hash table 可能是计算机科学领域最重要的一种数据结构,不同的实现方式会有不同的特性,但通常来说都会提供快速查找、增加和删除的操作。Go 内置了一个名为...

    猿哥

扫码关注云+社区

领取腾讯云代金券