微软的应用软件在程序非法时会弹出一个发送错误报告的对话框,他收集了进程崩溃时的现场环境,请问他是怎么做到的?我只知道有个DrWatson调试器可以收集现场环境信息,但不知道怎么在自己的程序中使用他,请教各位高手了。

解决方案 »

  1.   

    设置异常拦截
    在 CXXXApp的 InitInstance中写SetUnhandledExceptionFilter(myFunc);回调函数LRESULT CALLBACK myFunc(_Exception_Pointers *Exp)
    {
         Exp指针中包含了一些调试信息
        return 0;  继续执行
               1;  直接退出
    }我知道了就只有这些了
      

  2.   

    对处理未处理异常
    GetThreadContext得到异常时的上下文信息,StackWalk得到调用堆栈(只对DEBUG版本有效)
      

  3.   

    GetThreadContext也可以得到异常时的消息啊, 学习!
      

  4.   

    呵呵,都快说完了啊,我补充一个,还可以用 try 和 catch 抛出和捕捉异常,主要用在处理COM的异常。
      

  5.   

    设置Drwatson起作用在你的程序中如果出错(内存越界,堆栈溢出等)时,可以生成
    进程转存文件.然后用windbg可以调试定位错误.
    1.%AllUsersProfile%\Documents\DrWatson
    --请注意%AllUsersProfile%是通佩符号..具体也许指的是C:\Documents and Settings\All Users\Documents\DrWatson,和你OS装在什么逻辑盘有关.
    2.WinDbg在Microsoft网站上有下载
      

  6.   

    你也可以用Bound Checker和写log文件
      

  7.   

    kingzai,你好!你说的将Drwatson设置为对我的程序起作用,怎么设置呀?是要改注册表吗?要是客户系统装了其他调试工具,那怎么?
    我的msn:[email protected]
      

  8.   

    support.microsoft.com/kb/185837/EN-US/ 
    http://lrylan.51.net/jneybuyhywe/2-a/3-50/4-30/a08.htm