AxTrace是我的个人开发的一个调试工具,已经伴随我很多年了,在很多我参与的项目中发挥了重大作用,最近我花了不少时间把这个工具重新整理了一下,在这里正式公开。
        简单来说,AxTrace是给程序员在开发期间使用的一个日志工具,类似于DebugView,比如在程序中添加下面的语句:

        那么在AxTrace程序中就会显示出这条日志和变量值。

        和DebugView相比,AxTrace是专门为程序研发阶段而设计的日志工具,有一些很有用的特性:

  • 跨平台,输出端支持Windows(C/C++), Linux(C/C++), .NET(C#), Android(Java), JVM(Java), Unity(C#), Unreal4(C++),后续还会再添加更多平台
  • 提供axlog和axvalue两个主要输出函数,其中axlog用于输出日志,axvalue函数用于输出变量值,随时将所需要打印的变量值输出到窗口的固定位置
  • 线程安全,无阻塞,最大程度减少对发送程序的效率影响
  • 使用TCP/IP协议,支持远程接收日志
  • 多窗口显示日志
  • 使用由LUA脚本控制的Filter模块,灵活设置日志是否抛弃,显示的窗口、字体颜色、背景色等信息
  • 发送端不需要链接额外的库,只需要将几个文件添加到工程中即可,使用简单

        AxTrace的第一版出现在十几年前,当时我在写一个网络程序,发现用OutputDebugString输出日志很不方便,首先整个系统的日志信息混杂到一个窗口里,另外Filter太简陋,有用和无用的信息混杂到一起,于是就有了第一版AxTrace,当时因为都是在Windows平台上,就直接使用WM_COPYDATA实现跨进程的消息传递,在写《天龙八部》时,写了第二版AxTrace,完善了颜色定义和变量监控功能,但仍然使用WM_COPYDATA传输信息,最近几年在写移动平台程序时,将底层传输改为TCP/IP协议,并且实现了多个平台上的发送端代码。
        对于日志程序来说,过滤器是非常关键的功能,AxTrace最初的设计是固定提供几种日志类型,比如TRACE、DEBUG、INFO、WARN、ERROR、FATAL,在程序中设置这几种日志的颜色和是否显示,后来发现在不同场合对过滤器的要求都不一样,比如说下面几种情况

  • 在调试一个C/S程序时,需要把服务器日志和客户端日志输出到一个窗口中
  • 在研发某个功能时,要求把日志信息中含有“foo”字符串的日志高亮显示
  • 在研发某个多线程程序时,要求所有日志分线程显示在独立的窗口

        AxTrace为了实现这些功能,使用了LUA脚本来做过滤器,以缺省的过滤器脚本为例

        这段代码的意思是,所有日志信息输出到标题为”default”的日志窗口中,黑字白底,ERROR、和FATAL类型的消息使用特殊颜色标记。msg:get_style()用来获取日志消息的类型,也就是axlog函数的第一个参数,这是一个整数类型参数,除了预定义的TRACE、DEBUG、INFO、WARN、ERROR、FATAL之外,你可以任意使用其他自定义的数以实现复杂的过滤器功能。另外msg还有几个函数可以使用

        后面AxTrace仍会继续开发,比如支持IOS程序,另外还有一个重要的功能,就是ax2d系列函数加入,用来以图像形式显示程序中的位置信息,这在开发MMORPG游戏服务器时非常有用,可以用图像的方式实时监控服务器程序中玩家和NPC的位置信息。
        所有源码都已放到GITHUB上,所谓“工欲善其事、必先利其器”,希望能够帮到各位朋友。

1 thought on “开源一个调试工具

  1. 有幸刚入行就看了大神你的代码,当然也包括AxTrace。当初是各种激动、
    现在亦膜拜、 佩服。 转眼我也工作10年了,还是偶尔抽空来看看你的博客,亦获益匪浅。 技术方面感觉永远追不上大神你的脚步了。 感谢&&感恩。

发表评论

邮箱地址不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.