大家好
我用vs2005写了一个DLL程序,称为 test.dll吧
1.
当我把test.dll注入到别的进程中运行的时候,开始test.dll还是运行的很好,大约5分钟之后,就run time error了。
2.
当我把test.dll作为一个exe运行的时候,运行4-5个小时都不会出现这种问题于是我想调试这个dll。我在项目--》属性--》调试 里面设置了附加到calc.exe之后,debug模式下F5,却发现dll并未被插入到calc.exe进程中,也没有执行dll(执行dll后会弹出MessageBox).
这是一个多线程的dll。  我该如何调试呢?另外一个问题:
(runtime error有可能是内存泄露引起的,我用VLD检测时,在“输出”却没有提示任何信息,是不是vld检测多线程DLL的时候不好使?)

解决方案 »

  1.   

    怎么日志法?让程序输出到dbgView中?
      

  2.   

    输出到dbgview或写到文件里都可以。
      

  3.   

    一般写到log文件中,每条信息都带有时间信息,这样对于多线程,可以很好的类分析每个线程运行时的各种数据等
      

  4.   

    按你的做法启动调试后,你还需要手动加载另外的程序将DLL注入到被调试的calc进程。或者你先注入,然后再用VC attach to process。你可以在程序中用_RTC_SetErrorFunc设置RTL异常捕获函数来分析原因。
      

  5.   

    首先打印log ,然后就把dll改成一般的类,然后在调试
      

  6.   

    写log吧。调试多线程我就用这个方法。
      

  7.   

    用 WinDbg 调试,在需要调试的地方加如下语句:
    _asm{int 3};