前辈!做了个服务,跑了2天就挂了,到了问题函数哪儿也看不出啥
我想查看内存被占用的情况,挂了的时候我看是不是内存耗的不行了c++的,请高人指点,谢谢!

解决方案 »

  1.   

    运行一段时间查看任务管理器中进程占用的内存,句柄等是否持续递增,是就有资源leak程序出错的时候,查看一下出错的callstack
      

  2.   

    楼上二位说的我差不多都看了,可是我不能老盯着它
    一旦它挂了后,内存\cpu又恢复常态了,发现也晚了我思慕着能不能用内存占用来判断,比如当内存达到1.5M时,我就能知道
    可是c++获取内存使用情况,代码我不会
    请赐教
      

  3.   

    可以设置程序崩溃时输出dmp文件,也可以在开发环境调试模式下跑程序
    程序崩溃时查看下错误代码,或者检查下调用栈的情况。
    也可以用windbg源码级调试程序。a
      

  4.   

    我是debug跑服务,也能定位到出问题的地方:BYTE *PTem = new[8+1];
    可是看不出什么问题,它是跑了很久才挂了,出问题的地方已经执行了不知多少遍了
      

  5.   

    BYTE *PTem = new[8+1];
    那你可以用一个计数变量来实现计数,看看到底运行了多少次??
      

  6.   

    你这个题目本身其实是有问题的,什么叫纯C++?另外,内存是硬件,C++是开发工具,是一个开发软件,操作系统是架在软件和硬件之的一个桥梁。所以说,C++不能直接看内存使用的多少的。他必须依赖所在的操作系统。
      

  7.   

    我觉得肯定是该释放的内存没释放,我以前也遇到过这样的问题,后来我就把程序中涉及到handle等问题的函数,一个一个检查一遍,保证每个合理的结束处都有Closehandle或者FindClose等关闭句柄的地方,后来我的service就从3天一挂变成13天一挂,我没有办法,只好又写了个小程序,将我的service 10天一重启。
      

  8.   

    再关键函数(有可能出错的)地方,如果不确定,再每个函数都加上,写catch扑捉异常,然后将异常处理写到文本日志。这种子程序还不会崩溃。可以通过看日志,知道可能出问题在什么函数。
      

  9.   

    写日志,这个你会吧!!然后通过看log
      

  10.   

    钻石,部长,这个是API的,不是mfc的?c++可以用?
      

  11.   

    BYTE *PTem = new[8+1];估计是new 出来没有及时delete.代码逻辑理一下,适当时候delete [] PTem就好了。