大家好!有一个问题想请教:我们有一个进程, 运行时共有12个进程, 有一天,它出错了(臭名昭著的0x00000005).
Dr watson(drwatson.exe) 在一个log 文件中帮我们记录了出错时每个线程的Register状态、代码段、堆栈内容及线程ID。虽然有这些信息,但我们还是不知道怎么判断是哪个线程出错!不知谁能帮帮我们?谢谢!以上

解决方案 »

  1.   

    如果程序是你自己写的那么调用SetUnhandledExceptionFilter,这样当出现没有被捕获的异常时,就会调用你的
    ExceptionFilter,这时候你可以知道是哪个线程出的错
      

  2.   

    Visual C++调试器支持多线的情况,如果你在许多线程都调用的函数中
    设置一个断点,每当一个线程遭遇到此断点,调试器就会在线程之间循环切换
    有个方法可以避开这个问题,就是挂起所有线程,除了你感兴趣的那条(要调试
    的那条),在调试器中打开[Debug]菜单并选择[Thread]你就可以获得一个线程对
    话框,在这里你可以挂起所有的线程,把你要调试的线程留下来,单独调试他
      

  3.   

    谢谢你们的指点!程序是我们写的,但问题是这个错误已经发生了,并且只有Dr watson写的一个LOG文件可供调查,更糟糕的是这个错误不能再现,也不知道下一次什么时候又会发生。我们现在想通过那个Log文件找出是哪个线程执行的函数出的错。LOG文件中虽然记录了出错线程的ID但这个ID是动态的, 我们还是不能找到出错的函数。