A:第一种方式,可以设置断点进行程序调试,相关操作请查看:FAQ:
Q:怎么设置断点调试?
第二种方式,可借助
echo ,sendrunningdata,DebugRunEnv, DebugRunEnvdo,debugreturn等函数的功能来查看程序运行过程中的变量情况。
Echo:程序执行过程中打印信息到客户端。显示为字符串。
适合
简单类型的变量值输出,如循环中跟踪变量。
sendrunningdata(data,dname):将指定数据展示在指定名称的数据窗口中,
不终止程序。不指定dname时,则窗口默认为函数别名,与return的窗口同名,当执行到return时会被覆盖。
适合需要查看较为
复杂的中间变量值,如数组类型等。
DebugRunEnv(f:Boolean):
程序结束时返回当时程序中所有变量的值。其中,f为true则输出结果中包括系统参数,为false则不包括。
适合需要同时查看多个变量值时。程序只会返回一次结果,多次调用时后面的会覆盖前面的值。
DebugRunEnvdo:程序结束时返回调用子函数执行完时该
子函数在结束时的所有中间变量的值,不包括主程序的。不影响程序的正常运行。
适合查看子函数变量值。程序只会返回一次结果,多次调用时后面的会覆盖前面的值。
Debugreturn:在任意
指定位置终止程序,并返回此时指定变量的值。
适合程序中调用了多层子函数时,想返回执行到某一步时的某个变量的值。
范例1:echo , DebugRunEnv, DebugRunEnvdo用法案例
Function NoName6();
Begin
IndexID:='SH000300';
Endt:=20190321T;
sEndt:=datetostr(Endt);
echo sEndt;//打印变量值
//返回子函数执行完时所有中间变量的值
stocks:=DebugRunEnvdo getStocksTest(IndexID,Endt);
//运行到此时,输出所有中间变量的值,1输出结果中包括系统参数,0则不包括
DebugRunEnv(1);
data:=select sEndt as '截止日',*,spec(close(),['代码']) as '现价'
from stocks end;
return data;
End;
function getStocksTest(id,t); //选出PE最大的五支票
begin
//打印
echo '当前程序:',functionname(),' 指数:',id,' 日期:',datetostr(t);
bk:=getbkbydate(id,t);
peS:=select thisrow as '代码',spec(stockpe(t,0),thisrow) as 'PE' from bk end;
reS:=select *,thisorder as '排名' from peS order by ['PE'] desc end;
reS:=select * from reS where ['排名']<=5 end;
return reS;
end
//返回四个结果框
运行信息:
Noname6:getstockstest:
Noname6: DebugRunEnv(1)返回的结果
范例2:Debugreturn的应用
Function NoName7();
Begin
IndexID:='SH000300';
Endt:=20190321T;
sEndt:=datetostr(Endt);
stocks:=getStocksTest(IndexID,Endt);
data:=select sEndt as '截止日',*,spec(close(),['代码']) as '现价'
from stocks end;
return data; //正常情况下程序到这里结束,并返回data
End;
function getStocksTest(id,t); //选出PE最大的五支票
begin
bk:=getbkbydate(id,t);
peS:=select thisrow as '代码',spec(stockpe(t,0),thisrow) as 'PE' from bk end;
reS:=select *,thisorder as '排名' from peS order by ['PE'] desc end;
reS:=select * from reS where ['排名']<=5 end;
debugreturn reS;//有这一句,则整个程序到这里结束,并返回reS
return reS;
end
返回:
范例3:sendrunningdata的应用示例
可用于盘中监控中循环打印最新数据,具体可参考:FAQ:
Q:如何实现盘中监控
下面是一个简单的用法展示
setsysparam(PN_Precision(),2);
endt:=20250612T;
bk:=getbkbydate("SH000300",endt);
peS:=select thisrow as '代码',spec(stockpe(endt,0),thisrow) as 'PE' from bk end;
reS:=select *,thisorder as '排名' from peS order by ['PE'] desc end;
//展示所有样本排名
//不受当前精度设置影响,因此想要保留小数位,需要四舍五入后再展示
allD:=select *,roundto(["PE"],-2) as "PE" from reS end;
sendrunningdata(allD,"所有排名");
reS:=select * from reS where ['排名']<=5 end;
return reS;
程序运行后,最终打开了两个数据窗口,如下:
