写点什么

Corneliu Tusnea 发布调试工具 Hawkeye 的开源版本

2008 年 4 月 16 日

Corneliu Tusnea 是调试工具 Hawkeye 的作者,最近他在 CodePlex 上以开源项目的形式发布了 Hawkeye 的免费版本。

作为一个调试工具, Hawkeye 能 访问任何在运行中的.NET 进程,并能操纵它的对象。在其它像 Visual Studio 那样的调试器无能为力的领域,Hawkeye 依然能大显身手。只需将瞄准镜拖拽到运行的窗体上,你就能够看到那些控件具有的属性和事件。你不 需要知道它们相应的变量名称,甚至进程,Hawkeye 会自动处理它们。

InfoQ 就 Hawkeye 相关的一些问题采访了 Corneliu。

什么原因促使你构建 Hawkeye 这样一个软件?

我需要一个更好的工具来调试我的 WinForms 应用程序。在我开始编写 Hawkeye(那时叫 Runtime Object Editor)的时候,我正好在开发一个大型的 Windows Forms 应用程序。系统中有大量的运行时生成的 UI 和基于 XML 配置生成的控件,我们很难找出一个控件能够工作或者失败的原因。当时,Hawkeye 工 具还非常初级,你能看到和编辑的所有内容只包括你将在设计器中看到的标准属性。

然后,我就将这个工具发布在 CodeProject 上,并收到了一些很棒的反馈。

对我而言,在那时它可是一个很棒的工具,帮助我解决了很多问题。

大约一年之后,我增加了对显示与调用所有属性和方法的支持。而其余的功能则主要来自于一个研究反射的练习,我想通过这个练习看 看通过反射究竟能做到哪些事情:显示事件和事件处理器(event handler)、调用事件处理器、增加新的处理器、显示一个对象的字段以及应用程序信息等。在我没有开发 Windows Forms 应用程序时,其实我并不是真的需要这些功能,但这些练习对我学习反射代码的 emitting 以及更多地了解 CLR 是有好处的。

在 2006 年的秋季,在和 Adam Coga[来自 SSW ] 聊天时,他告诉我应该为这个工具取一个更好的名字。Runtime Object Editor 听起来既老土又没有什么代表性。根据该工具左上角的目标按钮的形状,他提议为“Bullseye”。后来我修正为“Hawkeye”,意为它 可以让你方便地以可视化的方式探查其他应用程序的代码。

你最近将 Hawkeye 发布到 CodePlex,这个决定对你来说困难吗?

难,也不难。我已经在 CodeProject 上发布了它的好几个版本,以及它们的源代码。

但是,CodeProject 没有协作功能,因此人们无法参与到 Hawkeye 的开发中来,这也阻碍了这款工具的发展。而我又没有更多的时间来打理 Hawkeye。

我收到很多关于增加新功能的要求,比如支持测试,或者支持更方便的调试,但我没有时间来做这些。因为没有增加要求的功能,而让大家倍感郁闷,这种感觉同样让我感到沮丧。

随着需求的不断增加,从最有利于 Hawkeye 发展的角度考虑,我最终决定再次发布 Hawkeye,让其他人能够参与其中,增加新的代码。

我记得在一年前,Hawkeye 是以一个免费版本和一个更强大的付费版本同时发布的。CodePlex 同时包含这两个版本吗?或者说你还在销售这个工具的专业版吗?

CodePlex 上只包含免费版。其实,正如 Hawkeye 的协议所指,付费版本仅仅多提供了两个额外的功能,99% 的开发者都不会用到这两个功能。

它们只是更酷和更炫一些,而不是更有用。

我注意到你开发 Hawkeye 时,混合使用了 C++ 和 C#,能谈谈你选择这种方式的原因吗?

正如你提到的那样,工具的大部分代码都是用 C#写的,C++ 部分只用来写进程注入的部分,显然,你肯定不能用 C#来写这一部分内容。如果全部用 C++ 来编写整个工具,又似乎有杀鸡用牛刀之嫌了。

我想,最佳方式就是使用合适的工具处理合适的工作。

Corneliu Tusnea 是 Readify 的高级咨询师,目前在微软 SDC 部门担任开发组长。Corneliu 具有编写实时交易平台的技术背景,所服务的项目包括欧洲的 EuroNext 和 Xetra、日本东京证券交易所、TOCOM(东京工业品交易所)、Osaka 和纳斯达克等。

查看英文原文: Corneliu Tusnea has Released Hawkeye as Open Source

2008 年 4 月 16 日 06:36457

评论

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

计算机的时钟(一):NTP协议

ElvinYang

3W字干货深入分析基于Micrometer和Prometheus实现度量和监控的方案

Throwable

Java 监控 Grafana Prometheus springboot

架构师训练营第六周作业

张明森

DolphinScheduler-1.3.0-dev功能体验

Eights

hadoop 大数据任务调度

数据分析之AB testing实战(附Python代码)

JackTian

Python 编程 程序员 数据分析 AB testing实战

Newbe.Claptrap 框架中为什么用 Claptrap 和 Minion 两个词?

newbe36524

Docker .net core netcore ASP.NET Core

RESTful 架构及实践

pingan8787

Java 前端 RESTf

“新基建”来了!云南三年投资3776亿!

CECBC区块链专委会

十个提高产品经理工作效率的必备工具,果断收藏

马踏飞机747

大数据 设计 产品经理

谈谈对分布式事务的一点理解和解决方案

Throwable

分布式 分布式事务 架构设计

并行流ParallelStream中隐藏的陷阱

Throwable

Java

SpringBoot2.x入门:应用打包与启动

Throwable

springboot

ARTS 打卡 第2周

Scotty

那些让程序员目瞪口呆的Bug

Java小咖秀

程序员 程序员人生 bug

基础篇:JAVA基本类型

csc

Java Java 25 周年

云原生实践系列:概述

孤岛旭日

Serverless 微服务 Service Mesh 服务架构

分布式系统的一些基础理论

俊俊哥

分布式事务 CAP Base

北京区块链规划重点发展海淀朝阳通州等区,加大对代币监管力度

CECBC区块链专委会

北京行动计划 四个高地 需求导向 为政务服务

Vagrant 快速入门

FeiLong

vagrant

java 后端博客系统文章系统——No3

猿灯塔

基础篇:Object对象

csc

Java Java 25 周年

百万级别数据Excel导出优化

Throwable

架构设计 springboot

list vs tupple

Leetao

Python 数据结构 Python基础知识

架构师训练营第六周作业

Melo

redis里的数据结构

流沙

redis

不会有人还不知道全文检索工具Lucene怎么用吧?文字长文教程

给你买橘子

Java 搜索引擎 lucene 程序员 开发工具

【计算机网络】网络层——路由器与路由选择协议

烫烫烫个喵啊

计算机网络 网络层

架构师训练营第六周总结

陈靓-哲露

Java 线程的生老病死

武培轩

Java 线程 多线程 并发 线程状态

架构师训练营第六周总结

hiqian

架构师训练营第六周作业

hiqian

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

Corneliu Tusnea发布调试工具Hawkeye的开源版本-InfoQ