关于树的调试(50分)

  • 主题发起人 主题发起人 白马小将
  • 开始时间 开始时间

白马小将

Unregistered / Unconfirmed
GUEST, unregistred user!
小问题:
一个树,怎么直观的调试啊?
就是说,我能不能直接看到整个树的结构?
 
各位老兄?
 
能不能请您换种表达方式?
看不懂哎
 
比如根节点a,它有2个子节点b,c,
b,c又分别有自己的子节点等等
但在调试的时候只能知道节点的地址,而我想看到用图形方式表示的各节点之间的关系,不知道能不能?
 
What kind of tree are you talking about?
 
如果是TreeView, 设计期只能通过它的Items Editor看到全部节点, 没其他办法.
要在Form上也看到需要继承TreeView自己写个新控件(其实不是很难)
 
type
Nodepointer=^Node;
Node=record
information :string;
data :double;
leftp :Nodepointer;
rightp :Nodepointer;
end;
var root:nodepointer
在watch list里面加入root,调试的时候只能过看到他的地址值
而我现在想在调试的时候看到整个树,就是像图那样直观的表示出来。
(比如当前递归进入的那个节点是第几层的等等)
在form上直接画不行,因为单步调试时,form是看不见的:)

谈谈大家的一些调试经验也好。
 
哇, 这样呀, 用 aLink^ 可以看到具体内容,
alink.leftp^ , alink.rigthp^ 不知道行不行。
 
是啊,我就是root.information,root.leftp.information,root.rightp.information
root.leftp.leftp.....的看的,3,4层还可以,看到5,6层后面脑袋都大了:)
不知道有什么好的方法? 难道各位没有遇到国这样的问题?
 
各位大侠,谈谈调试经验也好啊,感激不尽
 
提提前。。。
 
我调试树的方法有:
1)建三层的树进行充分的调试,因为树的算法通常采取递归的定义。小规模里面做对了,
推广到大规模也应该不会有太大的问题。
2)想SuperMMX所说的那样,跟踪和当前结点相关的父、子、兄弟结点。
3)如果上面两个方法都解决不了问题。就用日志文件。用编译指令({$DEFINE LOG} ...
{$IFDEL LOG}...{$ENDIF})在程序中加入输出到文本文件的语句,把流程、有关变量记
录下来。出错的时候,用打开日志文件查错。输出点设置得好的话,基本上很容易发现错
误的。
4)日志文件的方法也适合于深层递归的程序,把递归层数作为参数传递,在写日志文件
的时候,根据当前的递归层数作适当的缩进格式处理。这样递归的层次,各层的变量取值
就一目了然了。
 
多谢kidneyball
我去试试,几天后给分
 
kinneyball:能否详细的解释一下吗?
如果是下面的例子:
procedure ReadExpression(var q:Nodepointer);
var p:nodepointer;
begin
if expr[n]<>'' then begin //expr是字符串
ReadExpression(q.leftp);
new(p);
p.information:=expr[n]
//我现在想看p.information的值,请问怎么设置?
inc(n)
//n是我定义的一个全局变量
q:=p;
ReadExpression(q.rightp);
end
end;
 
接受答案了.
 
后退
顶部