Java线上排错---反编译文件

简介: Java线上排错---反编译文件

强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan


【前言】


       有时候经常会遇到一些诡异的问题:明明在本地运行代码没有问题,服务器代码和本地一样,请求的参数和所连接的数据源


都一样为啥服务器上不行那?


       如果在测试环境我们可以进行远程调试(参考《idea远程调试》),但是线上应该如何排查?


       博主遇到很多次这种情况,最后确定都是由于服务器上代码并没有更新导致的,没有更新原因有很多种比如:运维的部署脚


本有问题,执行错误脚本等等;那么如何确定线上运行的代码和本地运行有差异那?      


【反编译神器】


       一、两种反编译方法:


              1、通过jd-gui查看class文件


              2、通过阿里云的在线分析诊断工具Arthas的jad在线反编译;


       二、两种方法使用的详细步骤


              1、准备工作:


                  (1)以SpringBoot工程为例,代码地址:https://github.com/dangnianchuntian/springboot


                  (2)以代码中的LombokController 为示例


                  (3)在Linux上对项目进行部署


                  (4)通过swagger对项目进行访问


f90753d309a2bf4aef4df73c201cfb53_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ2hhbi5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70.png


              2、通过jd-gui查看class文件,方法:


                  (1)登录服务器,找到项目启动jar包,并创建临时目录t


f5d4115781d7d6b5e7ac8dc2b25cf3b9_20191123184205762.png


                  (2)将启动jar包拷贝到临时目录t中,并进入临时目录t中


a350ce04c8972dac75414618e94038c6_20191123184333668.png


                  (3)使用unzip命令对jar包进行解压


64cb0fab6af2a07dc80709dcca38bdcd_20191123184523840.png


                  (4)进入到相关目录中找到LombokController.class


38db9ffad0c99f6f3febb19a8f83498c_20191123184910610.png


                  (5)将LombokController.class导出到本地


45d3ae165c377a6b5c4bc8860ae0344a_20191123185012570.png


                  (6)在本地用jd-gui打开文件(jd-gui绿色免安装版地址:链接百度网盘 请输入提取码

提取码:x8up)注:如果出现文件损坏或打开乱码,请用方法二进行查看。


d9d209b492433c6d89e71e102b2b7b47_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ2hhbi5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70.png


              3、通过阿里云的在线分析诊断工具Arthas的jad在线反编译,方法:


                  (1)官网下载Arthas https://alibaba.github.io/arthas/download.html


                  (2)在服务器中通过 java -jar arthas-boot.jar 启动Arthas


e1e8f047d183f601f4bdbe19d35954f4_2019112319172556.png


                  (3)按序号(此处为1)进入到项目中,并执行jad com.zhanghan.zhboot.controller.LombokController 查看内容


8a1d90278bc168ca810092f39834081f_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ2hhbi5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70.png


【总结】

       1、有了这两种查看源码方法,可以使我们快速定位到问题;


       2、遇到问题后不要钻牛角尖,要从多个维度去思考问题。


相关文章
|
16天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
45 2
|
19天前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
43 2
|
28天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
1月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
37 4
|
1月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
1月前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
2月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
67 2
|
2月前
|
Java
Java开发如何实现文件的移动,但是在移动结束后才进行读取?
【10月更文挑战第13天】Java开发如何实现文件的移动,但是在移动结束后才进行读取?
66 2
|
2月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
255 1
|
2月前
|
监控 Java
Java定时扫码一个文件夹下的文件,如何保证文件写入完成后才进行处理?
【10月更文挑战第13天】Java定时扫码一个文件夹下的文件,如何保证文件写入完成后才进行处理?
127 1