游戏中调用lua脚本时lua_pcall函数总是失败,请问原因?

zhangjundriver 2009-12-25 09:16:12
我在项目中发现一个问题:

问题描述:
c++程序里面用脚本进行一些脚本函数调用,进行一些配置。
一般的情况下使用lua_getglobal来设置被调用的脚本函数名字。
然后紧接着调用lua_pcall函数来执行这个用lua_getglobal压入栈的脚本函数。

麻烦的问题是一般的情况下是正常的,不会出错误,可是会偶然性的发生程序运行一段时间后,出现所有脚本都不能正确执行。lua_pcall都返回错误值。说明下,所有用lua_getglobal函数压入栈的函数名都都正确的,没有错误,通过日志可以分析出来。


这是什么情况,麻烦大家帮忙啊~~~我在线等!!!

...全文
4886 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgr_36 2010-04-16
  • 打赏
  • 举报
回复
第一,检查配置。脚本读取位置,返回的错误信息表示,根本没有吧制定的函数压栈,换句话说就是在load的时候就有问题,加个判断看下就清楚。第二,不管是dofile还是dostring,都是先load再call,所以换函数也没意义。
kicksky009 2010-02-01
  • 打赏
  • 举报
回复
可能是你只是调用 lua_loadfile

就会出现这个错误,因为这个函数只是把脚本源码加载到内存,但是并没有编译,压栈

用lua_dofile 代替就可以了,因为它做了两样事情,加载源码到内存,然后编译,压栈
zhangjundriver 2009-12-25
  • 打赏
  • 举报
回复
ding~~~
zhangjundriver 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sandyandy 的回复:]
那就把调用的返回值也打出来, 看看报的什么错
[/Quote]

错误返回消息的日志其实是有的。lua_tostring(m_l, -1);通过返回的字符串都说 attempt to call a nil value。就是说我这个时候这个所有的脚本函数都已经不存在或者处于错误的状态了。会是什么原因呢,我查了几天了。
zhangjundriver 2009-12-25
  • 打赏
  • 举报
回复
自己去调试的时候不会出现这个问题。我是在碰到这个问题后要解决这个问题。结果我去调试都没有出现这个问题。我是通过程序运行的日志查看出来的上面的判定。

你说我c++里面抛出异常会影响到这个lua栈的状态么?因为每次lua调用失败前面基本上都有异常抛出。不过是c++代码抛的,道理上不应该影响到lua的栈的。
sandyandy 2009-12-25
  • 打赏
  • 举报
回复
那就把调用的返回值也打出来, 看看报的什么错
zhangjundriver 2009-12-25
  • 打赏
  • 举报
回复
换lua版本就不太现实了,那么大的项目。我现在觉得是不是别的地方把内存给破坏掉了,影响到了这个lua的栈和表。所以造成了lua的状态失效了。
「已注销」 2009-12-25
  • 打赏
  • 举报
回复
换个lua版本试试?
lua是个好东西,我近期也准备学习下LuaPlus。
zhangjundriver 2009-12-25
  • 打赏
  • 举报
回复
我汇编都忘光了。悲剧了。
firsthym 2009-12-25
  • 打赏
  • 举报
回复
貌似只有通过看汇编来分析了

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧