aardio打印调试信息

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

       调试信息对于软件测试非常重要,一般工程中的日志库可以输出打印日志的文件,行数,函数,时间等等信息,例如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("有现成的库,有入门范例,有库函数文档,用法也很简单");


“雪藏”了吗 ?!

登录后方可回帖

登 录
信息栏
公 告:

专注分享

谢绝纯提问

谢谢合作!
本站域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
打赏本站
Loading...