我的操作系统是win2000。我的程序在退出时在DEBUG版本下是好的,可是改成RELEASE版本后,退出的时候却有非法操作,我在RELEASE版本下设置了调试,发现程序是在NTDLL,MSVCRT,KERNEL32 下有错误。而且都是跑到汇编下面去了,请问这是什么地方的错误?

解决方案 »

  1.   

    Release版怎么能调试?它没有DEBUG(调试)信息呀!
    想跟踪这样的错误可以在你想设断点的地方写一条信息到一个临时文件.
      

  2.   

    RELEASE版本在Project Setting  中设置某些选项是可以调试的,在我写程序的地方设置断点?没用的,因为我的程序知道运行完ExitInstance()函数都没有出错,怎么设置?
      

  3.   

    那你还是用SOFTICE进行调试吧,它完全可以实现所有代码的调试.
      

  4.   

    SOFTICE不是破软件注册码的工具吗,可以调试吗
      

  5.   

    会不会是我内存没有释放的原因?可是我在DEBUG下已经测试了没有内存泄漏啊
      

  6.   

    我也碰到这个问题
    不知道如何解决
    最后采用了其他方法
    编译的时候,我选择 static library 
    而不是 Share Dll
    虽然编译后的文件大了,但至少执行没有问题了其他人告诉我说 :可能是某些指针没有初始化等问题
      

  7.   

    最近我的qq一直关着.debug与release表面上只是不同版本的输出,但实际上它们之间的区别是很大的,涉及到很多方面. 所以说,你的程序出现"非法操作"这种现象,如果其它人不自己亲自调试的话很难能找到其原因.另外,倒不一定非要用softice这个系统调试工具.你最好能看懂汇编, 这种问题95%是由于内存访问冲突引起的.祝你好运!
      

  8.   

    没看你的代码也不敢妄下评论,我有一点经验也许对你有点帮助:
    1、Degug 下的全局变量是会初始话为零的,而REALSE下不会。
    2、多线程下资源竞争有时Degug下可以(凑巧通过),而REALSE不行,
    其它一时还没想起
      

  9.   

    Debug和Release有两个比较重大的区别:
    1、变量的初始化——Debug初始成0xCDCDCDCD,Release初始化成0;对应的内存删除后Debug把内存区设置成0xDDDDDDDD,Release设置成什么没注意(不过不重要)。
    2、分配和删除内存的处理不同——Debug为了检查内存泄漏和写越界等会多分配一段内存在你要求的内存的开头和末尾,正常操作是发现不到这个区别的。综合以上分析,Debug和Release运行结果不同肯定是由于你:
    1、全局变量或静态变量的初始化不对,局部变量一般调试期间就能检查出来;
    2、对某段内存的操作越界了,这种越界在Debug下没关系,但在Release下就出问题了
    3、既然出问题在NTDLL里,你可以多检查一下自己所有的系统调用中要求指针参数的调用你提供的参数是否合理祝好运!
      

  10.   

    很可能是指针没有初始化,或者,指针操作错误,总之,出现这个问题,解决办法有两个:
         (1)在win98下仔细从头细查你的指针初始化及其操作
      
          (2)在win2000下debug.如果你已经安装了win2000,第二种方法一概更简便一些,只需断点运行。
      

  11.   

    freelybird(阿愚),我搞一个公用IP你能否帮我远程调试一下?
      

  12.   

    行, 你准备一下环境吧!下午, 如果我能远程登录上去的话. let me try
      

  13.   

    我下午等你在qq上call我,谢谢
      

  14.   

    一般都是如下问题带来两个版本不同运行结果:1.没有对变量进行初始化工作。debug自动帮你完成,release不行
    2。时间方面的控制错误。debug一般都加入一些调试代码,所以比较慢。这个可以通过在release中写文件来测出