aardio打印调试信息
调试信息对于软件测试非常重要,一般工程中的日志库可以输出打印日志的文件,行数,函数,时间等等信息,例如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其他的参数没研究,还有新发现再更新,有兴趣的朋友也可以留言讨论。
登录后方可回帖
感谢分享!