“云无界、端无边” OGeek 技术峰会 9月17日 南京不见不散! 了解详情
写点什么

讨论 5 种跟踪 Java 执行的方法

  • 2007 年 12 月 09 日
  • 本文字数:954 字

    阅读完需:约 3 分钟

Zviki Cohen 基于自己探索和理解他人所编写代码的体验,发布了跟踪 Java 执行过程的 5 种方法。他发现简单的阅读源代码(有些情况下是反编译代码),可能是十分乏味和有错误倾向的过程。作为替代,他推荐了 5 种不同运行时跟踪方法以在 Java 代码运行时观察它,消除了学习他人代码的许多不利条件。以下列表浓缩了他的 5 个建议: 1. 基本方法:断点和单步执行 “以最简单的方法开始:设置断点并开始跟踪你的程序执行。它在这些时候是最好的:你需要一个快速且简单的解决方案,你拥有所有代码并且知道想在哪里停止执行。你需要在给定断点设置精细的信息(参数、局部变量等等)。”
2. 初级方法:调试消息 “我们通过设置调试消息来继续对程序跟踪。最简单的方法是使用 System.out.println 语句把消息打印到控制台。 它在这些时候是最好的:你拥有代码且很清楚你正在寻找什么。对事件处理器来说这是非常好的解决方案。当贯穿某一复杂流程的执行过程时,它的高性能对理解触发了哪个事件是非常实用的。”
3. 热门方法:动态代理(Dynamic Proxy)“这是在简单调试消息之上所做的改进。动态代理是一个特定的 Java 特性,它允许开发者引入 proxy 类,加进某一给定类之前,并通过某一给定接口截获所有调用。它在这些时候是最好的:它对事件处理器来说是非常好的解决方案。你可以在很短时间内用一个普通代理设置一个虚拟事件处理器,来查看事件发生顺序。当需要理解事件处理器时这是最简单和快捷的方法。”
4. 暴力方法:运行时剖析器(Run-time Profiler) “剖析器是通过特定的 JVM hooks 在系统中跟踪所有调用的强大工具。但是用它来跟踪执行过程是大才小用。它在这些时候是最好的:你想拥有一个特定操作的完整画卷(如,非常短的执行流程)。”
5. 新时代:Aspects “面向方面编程(Aspect Oriented Programming——AOP)是一个非凡的想法。无需深入 Aspect 概念,这里只考虑其能力:它是截获你的代码执行既快速又容易的方法。你可以围绕方法、构造器、属性访问等等有选择地设置 hook,而不需要修改原始代码。在这些 hook 中,你可以打印调试消息。它在这些时候是最好的:你想跟踪可重新构建的代码执行。”

到 2007 年二月为止,Zviki Cohen 是 Amdocs 的架构师和高级顾问,现在他是软件界的私营企业家。

查看英文原文: Discussing 5+ Ways to Trace Java Execution

2007 年 12 月 09 日 20:543776
用户头像

发布了 150 篇内容, 共 39.4 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

基于集群的动态反馈负载均衡策略

No Silver Bullet

集群 6月月更 负载均衡策略

SREWorks v1.2 版本发布 | 运维市场能力发布

阿里云大数据AI技术

大数据 运维 云原生 开发运维

2022年秋季广州美博会-2022广州9月份美博会

展览通

2022年广州美博会 秋季广州美博会 美博会 广州美博会

读书笔记之:麦肯锡高效工作法

甜甜的白桃

读书笔记 读书 笔记 6月月更

我的远程办公经验 | 社区征文

五分钟学大数据

初夏征文

文旅新体验!3DCAT助力广州非遗“元宇宙”街区炫酷亮相

3DCAT实时渲染

非遗 元宇宙 实时云渲染

vivo 容器集群监控系统架构与实践

vivo互联网技术

云原生 监控 系统架构 Prometheus

APICloud 实现文档下载和预览功能

APICloud

文件 APP开发 APICloud

知识管理——知识经济时代的增资利器

小炮

本周二晚19:00战码先锋第6期直播丨共建测试子系统,赋能开发者提高代码质量

OpenHarmony开发者社区

OpenHarmony

通过一个具体的例子,讲解 SAP Cloud Platform Integration(CPI) 的使用方法

Jerry Wang

Cloud 系统集成 SAP 6月月更 cpi

面试突击58:truncate、delete和drop的6大区别

王磊

Java java常见面试题 常见面试题

【愚公系列】2022年06月 通用职责分配原则(八)-中介原则

愚公搬代码

6月月更

【LeetCode】出现次数最多的子树元素和Java题解

Albert

LeetCode 6月月更

开源生态|超实用开源License基础知识扫盲帖(下)

Orillusion

开源 WebGL 元宇宙 Metaverse webgpu

Webshell检测引擎:青藤开放200个雷火SaaS版免费账号!

青藤云安全

安全攻防 网络安全 攻防演练

【深入理解TcaplusDB技术】TcaplusDB 表管理——清理表

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

案例驱动 :从入门到掌握Shell编程详细指南

百思不得小赵

bash 运维 6月月更

TiDB 性能分析&性能调优&优化实践大全

TiDB 社区干货传送门

强推10款Python常用的开发工具

左手の明天

Python ide python开发工具

大数据培训Flink之Table API 与 SQL

@零度

flink 大数据开发

OLAP分析型应用场景中,数仓中vacuum为何对列存表无效

华为云开发者联盟

数据库 后端 存储 华为云

Jenkins 通过检查代码提交自动触发编译

HoneyMoose

DOM核心——Element类型

大熊G

JavaScript 前端 6月月更

C#入门系列(二十) -- 面向对象之封装

陈言必行

C# 6月月更

告别手写,使用 Doc View 快速生成接口文档

程序员小航

IDEA 插件

Wallys/Routerboard/DR8072A-HK09/IPQ8072A/802.11ax

wallys-wifi6

802.11AX WIFI 6e

低代码实现探索(四十三)前台对象数据树

零道云-混合式低代码平台

IAST 初探:博采众长、精准定位、DevOps友好

SEAL软件供应链安全

DevOps 安全 IAST 应用安全测试 开源软件供应链

Java技术培训之设计模式七大原则

@零度

设计模式 JAVA开发

Java开发培训之设计模式UML类图

@零度

JAVA开发 UML

首届腾讯云大数据峰会暨Techo TVP开发者峰会

首届腾讯云大数据峰会暨Techo TVP开发者峰会

讨论5种跟踪Java执行的方法_Java_R.J. Lorimer_InfoQ精选文章