找回密码
 注册
查看: 9024|回复: 28

[原创]UDF调试小技巧。。。。

[复制链接]
发表于 2006-10-20 10:35:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
[这个贴子最后由windyman在 2006/10/20 10:40am 第 1 次编辑]

[watermark]写一个程序容易,写一个正确的程序却不容易!很少有人拿到一个问题就能够完全正确的给出程序解答。既然错误难免,那就要学会如何找到错误,debug正是一个找错误的过程。
由于Fluent 的UDF被编译成了dll,并且cfd的计算中总是有大量的循环语句, 这无疑给debug带来了很大的困难,象普通的程序调试那样在vc++里设置断点就不大可行了。举例来说, 在fluent的DEFINE_SOURCE宏中, 如果你使用了某个非法(access violation)的指针,fluent不会告诉你错误出在这里, 只会提示说Error: access violation之类的废话;但是如果你在这个宏里加上Message之类的语句检查某个变量x的值的时候,你会发现Fluent的console屏幕输出的全是你debug的x变量值,你就只有“痴痴的等待”那崩溃的一刻到来吧。原因很简单, 在DEFINE_SOURCE宏中的代码, fluent会对每个cell都循环执行一遍, 所以才会让你如此痴痴的等。。。有人也许会觉得不用Message函数而把所有的debug信息写到某个logfile文件中,但马上会发现哪个logfile大得有几百M,甚至上G,windows几乎无法应付打开,如果你的计算问题很大的话。
最近本人在编写颗粒程序中总是在某个不确定的时间步(初始颗粒速度是随机给出的),计算颗粒速度程序出现了access violation, 由于涉及到大量颗粒,真让我伤透了脑筋(在颗粒少的情况下这个问题又不一定出现)。虽然困难, 问题还是需要解决。
针对上面的问题,本人想到的一个小技巧是: 先定义一些全局变量, 比如g_x, g_y, g_p等,这些变量类型与你要调试的变量类型一致,在需要调试的地方(比如DEFINE_SOURCE宏之类的地方),将你要调试变量x,y等的值赋给这些全局变量;在编写一个UDF宏DEFINE_ON_DEMAND,比如DEFINE_ON_DEMAND(Debug),在这个宏里面输出前面定义的全局变量,用Message或者是Logfile都可以; 一旦fluent崩溃后执行这个Debug命令, 这时候你就知道在出现错误的时候这些变量的值了。
上面的这个小方法几乎不浪费fluent执行时间,当然要耗费一点编写代码时间, 但是比起Message输出以及Log文件输出,效率高得多。
欢迎大家交流。本人Email: chunliangwu@gmail.com; QQ: 69065119[/watermark][br][br][以下内容由 windyman 在 2006年10月20日 10:39am 时添加] [br]
发表于 2006-12-29 23:41:58 | 显示全部楼层

[原创]UDF调试小技巧。。。。

好贴,没人顶。
发表于 2007-1-7 19:58:30 | 显示全部楼层

[原创]UDF调试小技巧。。。。

高手。
发表于 2007-1-8 15:55:15 | 显示全部楼层

[原创]UDF调试小技巧。。。。

厉害,研究得够深入  PF
发表于 2007-4-14 10:09:21 | 显示全部楼层

[原创]UDF调试小技巧。。。。

支持一下,需要如此做研究才能发展啊
发表于 2007-4-19 22:59:48 | 显示全部楼层

[原创]UDF调试小技巧。。。。

虽然还没有能力与大家共享我的学习经验(我是菜鸟,呵呵)
但回帖的能力还是有的
大家一起加油!!
发表于 2007-5-11 18:51:49 | 显示全部楼层

[原创]UDF调试小技巧。。。。

好贴,
强人
发表于 2007-5-14 21:51:00 | 显示全部楼层

[原创]UDF调试小技巧。。。。

的确很强
发表于 2007-5-15 16:21:33 | 显示全部楼层

[原创]UDF调试小技巧。。。。

经验之谈
其实,只要大家相互借鉴,苦心钻研
学好软件也是很简单的
发表于 2007-7-15 20:43:34 | 显示全部楼层

[原创]UDF调试小技巧。。。。

很好,大家要支持啊!!!
发表于 2007-9-17 23:16:07 | 显示全部楼层

[原创]UDF调试小技巧。。。。

  希望楼主多多发贴,跟贴支持!
发表于 2007-9-18 11:34:21 | 显示全部楼层

[原创]UDF调试小技巧。。。。

写地不错
debug的时候要善于运用UDM存储器,这样错误点在哪个区域都能PLOT出来,而不仅是数值
发表于 2007-9-20 09:39:49 | 显示全部楼层

[原创]UDF调试小技巧。。。。

楼主,及doublegallon写得都很好。
gallongallon能否详细说明。
发表于 2007-10-13 21:16:44 | 显示全部楼层

[原创]UDF调试小技巧。。。。

楼主很厉害!
小弟已经把你的联系方式记下了!
有机会一定会打搅你的!
顶!
发表于 2007-10-23 12:56:20 | 显示全部楼层

[原创]UDF调试小技巧。。。。

厉害,顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表