北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 6928|回复: 1

name()函数的问题导致宕机原因探索

[复制链接]
发表于 2009-1-21 19:39:56 | 显示全部楼层 |阅读模式
今天测试时试了一下call /feature/name->replace_color("adsfa"),结果立马宕机
debug.log中显示Error '*Undefined function: query_temp
经过jason调试core发现,/feature/name包含name()函数,而name()函数比较特殊,mudos认为其是一个master_ob的函数,
如果一个object含有name(),则不管调用此object的什么函数,都会先调用一下name()。
不幸的是/feature/name的name()写得不太严格,在里面query_temp("apply/name"),
这在一个object()->name()时并没有问题,因为object也继承了dbase里的query和query_temp,
但在直接call或者其他没有继承dbase的时候,如果调用name(),则会引起master出错,直接宕机。

解决办法是在/feature/name.c的name()中先用function_exists判断一下要调用的
函数,比如query和query_temp是否存在,如果存在再调用它们。

以后应该注意:
如果不是必须,则不要在程序中加入name()函数,如果必须加入,则一定要仔细判断,
一定不能出现调用不存在函数的可能性。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-1-21 20:26:58 | 显示全部楼层
lpc支持多重继承,并且可以在父类中调用另一个父类的函数,这是严重违反封装原则的。
不知道当初设计者的出发点是什么。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-3-29 03:55 PM , Processed in 0.008988 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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