none
程序崩溃时,如何捕获到是哪个模块出错? RRS feed

  • 常规讨论

  • 程序 P.exe 调用模块A.dll, B.dll, C.dll, 并且A, B, C都有保护措施,每次A, B, C任意一个出错,程序都会跳转到A。dll中去,所以没有办法用 vs debuger来调试,请问有没有其他办法可以定位到具体是哪个模块出错?谢谢
    D
    2011年5月5日 7:48

全部回复

  • 如果在运行目录下可以找到A,B,C Dll的pdb文件。如果你有源文件的话。即使崩溃在A中被捕捉,也可以在调用栈中找到对应的崩溃位置。
    麻烦把正确答案设为解答。
    2011年5月5日 10:05
    版主
  • 正常情况下是可以的,但是由于A,B,C都做了保护,VS调试时便自动跳到其他地方了
    D
    2011年5月10日 3:38
  • 典型的作法, 一是加Log, 二是自己加ThrowException
    相信命运
    2011年5月11日 13:26
    版主
  • 这个:http://www.codeproject.com/KB/threads/StackWalker.aspx

    // The exception filter function:
    
    LONG WINAPI ExpFilter(EXCEPTION_POINTERS* pExp, DWORD dwExpCode)
    {
     StackWalker sw;
     sw.ShowCallstack(GetCurrentThread(), pExp->ContextRecord);
     return EXCEPTION_EXECUTE_HANDLER;
    }
    
    // This is how to catch an exception:
    
    __try
    {
     // do some ugly stuff...
    
    }
    __except (ExpFilter(GetExceptionInformation(), GetExceptionCode()))
    {
    }
    2011年5月12日 7:40