`
javatar
  • 浏览: 1704674 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

CommonTemplate完成DEBUG单步调试

    博客分类:
  • HTTL
阅读更多
CommonTemplate(http://www.commontemplate.org)的
Debug单步跟踪初始版完成, 可下载每日构建版本试用. (http://commontemplate.googlecode.com/svn/trunk/commontemplate/dist/)
将在后期TemplateEditor的eclipse插件中集成此Debug功能, 并做成策略接口,
当在eclipse环境中时自动适用插件集成,
在非图形系统中(纯文本模式,AWT未加载时)自动适用命令行,
否则使用swing图形界面. (现完成版为swing图形界面)
测试代码:
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.commontemplate.core.Context;
import org.commontemplate.core.Factory;
import org.commontemplate.engine.Engine;
import org.commontemplate.standard.ConfigurationSettings;
import org.commontemplate.tools.PropertiesConfigurationLoader;

public class OutTester {

	public static void main(String[] args) {
		// 定义数据
		Map model = new HashMap();
		model.put("allow", Boolean.valueOf(false));
		List users = new ArrayList();
		model.put("users", users);
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		try {
			users.add(new User(12, "liangfei", "liangfei0201@163.com", 10000, df.parse("2007-08-09")));
			users.add(new User(15, "zhangyong", "zhangyong@aaa.com", 25000, df.parse("2007-08-10")));
			users.add(new User(17, "bobo", "bobo@bbb.com", 95010, df.parse("2007-08-11")));
			users.add(new User(17, "lixudong", null, 25000, df.parse("2007-09-11")));
		} catch (ParseException e) {
			e.printStackTrace();
		}

		// 配置
		ConfigurationSettings config = PropertiesConfigurationLoader.loadConfiguration("commontemplate.properties");
		Factory factory = new Engine(config);
		// 执行模板
		Writer output = null;
		try {
			output = new OutputStreamWriter(System.out);
			Context context = factory.createContext(output);
			context.pushLocalContext(model);
			factory.getTemplate("out.ctl").render(context);
			context.clear();
			output.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (output != null) {
				try {
					output.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

}

测试配置: commontemplate.properties
@extends=org/commontemplate/tools/commontemplate.properties
debug=true

测试模板: out.ctl
ttttt
${allow}
$breakpoint
$if{users != null && users.size > 0}
<table>
	$for{user: users}
	<tr>
		<td>${user.name}</td>
	</tr>
	$end
</table>
$end
$for{num: 1..3}
	${num}
$end

引擎遇到$breakpoint指令时, 弹出附件所示界面.
高亮显示当前运行的指令, 上下文中的变量.
点击"Step"单步运行,
点击"Step Over"单步越过块指令的内部指令运行(非块指令此按钮不可用),
点击"Resume"恢复正常运行(直到下一$breakpoint),
点击"Terminate"终止运行.

注: 当commontemplate.properties配置: debug=true 时才启用调试, 否则忽略$breakpoint指令以及其它debug指令.

尚未美化界面, 暂先保证功能实现.

JFrame未重用(每一步都创建窗口), 所以调试时会出现窗口闪动, 待完善.
  • 描述: 指令跟踪
  • 大小: 65.3 KB
分享到:
评论
4 楼 javatar 2008-04-24  
完成修改:
通过ThreadLocal将Debug窗口锁定, 一次调试过程复用同一个窗口, 不再出现闪烁.

已更新到每日构建jar包中:
http://commontemplate.googlecode.com/svn/trunk/commontemplate/dist/

或者用SVN下载开发目录:
svn checkout http://commontemplate.googlecode.com/svn/trunk/ commontemplate-read-only
直接导入项目到Eclipse中, 然后运行src/test/java/integration.OutTester进行测试.
3 楼 javatar 2008-04-22  
1. 加入Step Return, 使Step功能齐全(Into, Over, Return).
2. 加入变量类型框
3. 将UI风格设成与当前系统相同风格.
4. 按钮改成图片.
5. 显示时, 保持模块源的缩进格式.
6. 改为采用反显背景色提示当前运行指令所在位置, 使可以看到空白符.
2 楼 javatar 2008-04-21  
有朋友建议, 在调试过程中, 动态修改变量栈的值. (现在只能查看), 下一版本将考虑这个建议.
1 楼 jasongreen 2008-04-21  
so cool!

相关推荐

    Eclipse 的单步调试.docx

    Eclipse 的单步调试是指在 Eclipse 集成开发环境(IDE)中使用单步调试功能来 debug Java 程序。单步调试功能可以帮助开发者逐步执行程序,检查程序的执行结果,改变变量的值,检查代码段执行结果等。 设置断点 在...

    嵌入式linux中单步调试程序的方法(图文详细说明)

    在嵌入式Linux系统中,调试程序是一项至关重要的任务,特别是在遇到复杂问题时,单步调试可以帮助开发者逐步跟踪代码执行,查找和修复错误。本文主要介绍如何在QtCreator中进行嵌入式ARM程序的单步调试,以下是详细...

    codeblocks 单步调试演示

    本文将深入探讨CodeBlocks中的单步调试功能,并通过详细步骤指导如何进行有效的单步调试。 1. **什么是单步调试**:单步调试是一种逐行执行程序的方法,它允许程序员观察每一步的执行情况,包括变量的变化、函数...

    CodeBlocks单步调试入门

    CodeBlocks IDE的单步调试功能主要集中在“Debug”菜单中,这个菜单包含了丰富的调试工具,供程序员在程序出错时选择使用。然而,在日常使用中,通过工具栏或快捷键进行单步调试往往更加方便快捷。CodeBlocks允许...

    VC6.0单步调试

    ### VC6.0单步调试知识点详解 #### 一、基础知识 **单步调试**是在软件开发中一种常用的调试技术,它允许开发者逐步执行程序,从而观察程序在每一行代码执行后的状态变化,有助于理解程序流程及定位错误。在Visual ...

    VxWorks单步调试环境的搭建

    ### VxWorks单步调试环境的搭建 #### 一、项目编译及VxWorks OS组件配置 在搭建VxWorks单步调试环境的过程中,首先需要进行的是项目的编译及VxWorks操作系统的相关组件配置。 1. **编译设置**: - 在项目编译...

    Intellij idea远程debug连接tomcat实现单步调试

    1. IntelliJ IDEA 远程 debug 连接 Tomcat 实现单步调试的概念和原理 IntelliJ IDEA 是一款功能强大的集成开发环境(IDE),它提供了强大的调试功能,包括远程 debug 连接 Tomcat 实现单步调试。远程 debug 连接 ...

    在dev C++ 中如何单步调试程序

    首先,为了能够进行单步调试,我们需要确保编译器生成包含调试信息的可执行文件。在Dev C++中,这可以通过以下步骤实现: 1. 打开Dev C++,进入“Tools”菜单,选择“Compiler Options”(编译器选项)。 2. 在弹出...

    使用H-Jtag或Jlinkv7单步调试、RVDS 配置

    - 如果在首次调试时遇到了错误,可以尝试重新配置AXD,并通过“Files-&gt;Load Debug Symbols”加载TQ2440_Test.axf文件,以便正常加载镜像并进行单步调试。 #### JlinkV7单步调试 **配置步骤:** 1. **加载DLL文件:...

    使用eclipse单步调试jni代码 (方法2)

    ### 使用Eclipse单步调试JNI代码(方法2) #### 环境配置 为了能够有效地进行JNI代码的调试,首先需要确保以下环境已正确配置: - **ADT Bundle**: Eclipse版本为Juno - **NDK**: 版本r9 - **JDK**: 版本8 - **...

    android源码跟踪单步调试

    本文将详细解释如何进行Android源码的单步调试。 首先,要进行源码跟踪和调试,你需要确保已经成功编译了Android系统源码。编译完成后,你会在`out/target/product/generic`目录下找到三个关键的镜像文件:`system....

    CodeBlocks单步调试入门_codeblocks_教程_

    2. 启动调试:在主菜单中选择"Debug" -&gt; "Start debugging"(或者按F9键)。程序将以调试模式运行,首先在第一个断点处暂停。 3. 单步执行:在调试模式下,你可以使用以下快捷键进行单步调试: - F7:步入(Step ...

    (2 条消息) caffe怎么单步调试? - 知乎1

    标题中的"Caffe怎么单步调试?"是指在开发或优化Caffe深度学习框架时,如何进行源代码级别的调试,以理解和解决可能出现的问题。Caffe是一个高效、模块化的深度学习库,广泛应用于计算机视觉和机器学习任务。对于...

    使用eclipse单步调试jni代码(方法1)

    - 通过Debug As-&gt;Android Native Application启动调试,使用F6进行单步调试。 9. **问题排查**: - 如果调试失败,检查端口占用情况,释放被占用的调试端口,或者给相关文件添加执行权限。 10. **Eclipse调试...

    php5.6 下用zenddebugger单步断点调试代码

    9. **完成调试**:完成调试后,点击“继续”按钮,代码将继续执行直到结束,或者再次遇到下一个断点。你可以随时添加、删除或修改断点,以适应不同的调试需求。 通过以上步骤,你就可以在PHP 5.6环境中使用Zend ...

    如何用Toad调试存储过程、触发器

    在Oracle 10g及以后的版本中,引入了新的接口JDWP(Java Debug Wire Protocol)用于调试PL/SQL和存储的Java过程。然而,Toad同时支持JDWP和DBMS_DEBUG接口,并且推荐在不涉及Java代码调试时继续使用DBMS_DEBUG,因为...

    DebugView 调试工具

    DebugView是一款强大的系统调试工具,由微软的Sysinternals团队开发。它允许用户捕获、查看和分析控制台输出,包括应用程序的日志消息、调试输出以及内核模式调试信息。这款工具对于软件开发者、系统管理员以及任何...

    skynet debug 部署 vscode环境下的debug 断点调试

    然后在左侧调试面板选择刚才创建的“Debug Skynet”配置,点击绿色的运行按钮或使用`F5`快捷键启动调试会话。 在调试过程中,你可以观察变量的值,步进执行代码,查看调用堆栈等。Skynet的调试控制台(`debug_...

    myeclipse的debug调试步骤总结

    MyEclipse Debug 调试步骤总结 MyEclipse Debug 调试是 Java Web 项目开发中非常重要的一步,正确的 Debug 调试可以帮助开发者快速地定位和解决问题。本文将总结 MyEclipse Debug 调试步骤,帮助开发者快速上手使用...

Global site tag (gtag.js) - Google Analytics