ljonathan 发表于 2009-6-23 15:07:45

运行loadrunner 场景,报出mmdrv.exe 的错误,内存不能为"writtern"

运行loadrunner 场景,报出mmdrv.exe 的错误





说明:
刚刚做200并发的时候,还是运行正常,这回50并发确出错了
脚本中调用了动态库,也用了指针,不过脚本最后都free()了


wsrun32.dll 也放到过bin下了,
内存问题不好搞哦
http://bbs.51testing.com/images/attachicons/rar.gif wsrun32.rar (58.96 KB)
下载次数: 400
2008-11-12 17:20

云层 发表于 2009-6-23 17:52:06

系统问题吧?

ljonathan 发表于 2009-6-23 19:19:26

系统问题吗?

ljonathan 发表于 2009-6-24 01:14:02

《LR在中文操作系统中可能发生的错误》
http://www.51testing.com/html/23/n-110823.html

传说中的云层老师。。。。。转载很多哦
你所说的系统问题是不是需要装 英文的操作系统呢?
楼上明示哦
您现在使用的是不是英文操作系统哦
打算明天试一试,能解决问题就太感谢了。。。。。。

ljonathan 发表于 2009-6-25 13:48:53

装了英文的操作系统,还是出错
应该是脚本中用了指针的问题

Action.c(69): Error: C interpreter run time error: Action.c (69):Error -- memory violation : Exception ACCESS_VIOLATION received.       
Action.c(69): Notify: CCI trace: Action.c(69): strcpy(0x06ae3120 "", 21451440)
.       
Action.c(69): Notify: CCI trace: Compiled_code(0): Action()
.       
Action was aborted.       
Ending Vuser...       

在VuGen中运行,脚本没有问题,在Controller 中并发运行就会出错.....

相关的代码如下:

        char *phone=(char *)malloc(20*sizeof(char));    //手机号11
        char *kind=(char *)malloc(3*sizeof(char));      //类别1
        char *verifycode =(char *)malloc(8*sizeof(char));   //指针型的手机验证码,做为输入参数使用        8

                     strcpy(phone,"19000012730");    //手机号
        strcpy(kind,"2");                              //业务类别
        strcpy(verifycode,getData(phone,kind));      //   getData(phone,kind) 是delphi写的dll,通过手机号和业务类别,返回验证码
        lr_save_string(verifycode, "myverifycode" );//变量转参数,下面用到

                  脚本的结尾,我添加了指针释放
                      free(phone);
       free(kind);
        free(verifycode);

斑竹,帮忙看看呃。。。。。。


Notify: CCI trace: Action.c(69): strcpy(0x06ae3120 "", 21451440)
       我看这个错误信息,应该是,dll函数已经返回了验证码:21451440,但拷贝的时候strcpy函数出错了。
    对C指针不熟,帮我分析下。。。谢谢了

---------------------------------------------------------------------
    难道是,不释放。。。。
    释放内存了,反而不能为written

ljonathan 发表于 2009-6-25 13:53:05

Abnormal termination, caused by mdrv process termination.

Action.c(69): Error: C interpreter run time error: Action.c (69):Error -- memory violation : Exception ACCESS_VIOLATION received.

ljonathan 发表于 2009-6-29 13:20:31

目前: 问题没有解决,更换测试工具为JMeter

eramyang 发表于 2009-6-29 14:31:27

我好像也碰到过这个问题,应该是由于有多个mmdrv.exe进程在运行引起的,你可以在任务管理器里面把所有的mmdrv.exe进程关闭,然后再重开测试脚本。

shanxi 发表于 2009-6-29 14:59:58

回复 1# 的帖子

你换用以进程运行,放上你这样运行的结果

ljonathan 发表于 2009-7-7 18:25:27

我换过用进程运行,大概是200Vuser里仍然有三四十个Vuser会出错
而且用进程的话,CPU占用率超过90%。。

“你可以在任务管理器里面把所有的mmdrv.exe进程关闭,然后再重开测试脚本。”
这样应该会好些,运行场景时,和运行场景前,都会关注 mmdrv.exe进程的

谢谢楼上两位朋友的答复。。。
这个问题,慢慢研究。。。

shanxi 发表于 2009-7-7 18:28:06

原帖由 ljonathan 于 2009-7-7 18:25 发表 http://bbs.51testing.com/images/common/back.gif
我换过用进程运行,大概是200Vuser里仍然有三四十个Vuser会出错


看来跟 线程安全 无关了。

试试以下改法:
char *phone= NULL;
phone=(char *)malloc(20*sizeof(char));
char *kind=NULL;
kind=(char *)malloc(3*sizeof(char));
char *verifycode =NULL;
verifycode =(char *)malloc(8*sizeof(char));
   
..........................................

free(phone);
phone= NULL;
free(kind);
kind=NULL;
free(verifycode);
verifycode =NULL;
=============================================================
程序开始的初始化可有可无。

[ 本帖最后由 shanxi 于 2009-7-7 18:44 编辑 ]

ljonathan 发表于 2009-7-7 18:47:36

下班了,改天,我再试试用进程运行, 再验证一下,把结果贴出来

还有就是变量设置:select nextrow : Unique,貌似这个设置也容易引起问题,把它换成其他的再试试。

继续。。

还有就是逐行注释,是不错的排错方法

蓝色水滴 发表于 2010-2-23 17:04:58

在云层老师的贴里,说这个问题在lr9.5上是无法解决的,那除了装英文的操作系统外,还有其它的解决方法吗?

地铁和人海 发表于 2013-5-21 11:37:49

急需,怎么不能下载???

swj0618 发表于 2013-6-6 14:26:21

回复 12# ljonathan


   怎么解决的,,没贴方法么~~~~

熊猫仙 发表于 2014-5-5 11:08:43

win7-64中文旗舰版+lp11破解版 在运行测试时遇到同样问题,研究中。。。。
页: [1]
查看完整版本: 运行loadrunner 场景,报出mmdrv.exe 的错误,内存不能为"writtern"