aardio打印调试信息

By popy32 at 2022-10-01 • 1人收藏 • 1376人看过

       调试信息对于软件测试非常重要,一般工程中的日志库可以输出打印日志的文件,行数,函数,时间等等信息,例如C项目中 

DebugLog( __FILE__ , __LINE__ , "pfuncAddDoneQueueUnitProc ok" );

后期很方便的定位问题,aardio中其实也有不过雪藏在库的源码里,现在拿出来整理下。


 先上测试demo

import win;
import console;
import debug;
console.open();

var dInfo = debug.queryinfo(1, "select source,function,upvars,name,currentline,activelines");
console.dumpTable(dInfo)


function debug_(){
	var dInfo = debug.queryinfo(2, "select source,function,upvars,name,currentline,activelines");
    console.dump(dInfo)
}

debug_();


function f(){
	debug_();
}

f();

//winform.show();
win.loopMessage();


这里 debug.queryinfo 函数作用是返回当前的运行(调试)信息,第2个参数select选择需要字段,调试信息通过表返回 debug.queryinfo(1 返回的是debug.queryinfo所在的行,但是一般我们用一个新函数debug_封装实现更多功能,这个时候debug.queryinfo的行数没有意义了,需要关注调用debug_位置的行数,所以是debug.queryinfo(2,


当然如果是debug_被继续封装,debug.queryinfo(3,以此类推,动手试试就知道了


再贴下debug.queryinfo返回的所有调试信息

/**intellisense(!debugInfo)

source = 源码相关信息

source.file = 文件名

source.code = 源码

source.src = 源码或文件名缩略信息

source.beginline = 开始定义行

source.endline = 结束;定义行

source.kind = 类型\n"kernel"表示内核函数\n"function"\n表示普通函数\n"main"主函数\n"tail"尾调用

name =  函数名字

name_where =  global(全局变量)、\nself(当前名字空间成员变量)、\nvar(局部变量)、\nupvar(上层语句块局部闭包变量)

activelines =  函数的有效代码行列表\n无效行指的是空行或注释等

function =  当前函数对象

upvars = 引用的上层函数闭包变量数目

currentline =  当前行

end intellisense**/



这样比如实现最开始C调试的

DebugLog( __FILE__ , __LINE__

用aardio代码就是

// winform.aardio

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add()
/*}}*/

import win;
import console;
import debug;
console.open();

DebugLog = function(...){
    var dInfo = debug.queryinfo(2, "select source,function,upvars,name,currentline,activelines");
    var time_ = tostring(time());
    var file_ = dInfo["source"]["src"];
    var line_ = dInfo["currentline"];
    var function_ = dInfo["name"];
    console.log(time_, file_, line_, function_, ...) 
}

function f1(){
	var t = math.random();
	DebugLog("随机数", t);
}

function f2(){
	f1();
}

f2();
//winform.show();
win.loopMessage();


console.log可以继续扩展,可以引入fsys.log,输出到日志文件,定义调试级别等等。打印文件名那里source.file会输出为null,可以改成source.src打印源码文件前几个字符,自己注释一下文件名就行了。还有像activelines是打印程序的运行轨迹,也可以统计代码有效率。 debugInfo其他的参数没研究,还有新发现再更新,有兴趣的朋友也可以留言讨论。



2 个回复 | 最后更新于 2022-10-02
2022-10-02   #1

感谢分享!

2022-10-02   #2
import debug.log;
debug.log.print("有现成的库,有入门范例,有库函数文档,用法也很简单");


“雪藏”了吗 ?!

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...