连接调试器启动程序会导致程序关闭

时间:2014-12-18 11:49:52

标签: c++ debugging visual-studio-2012 dll

当我通过附带调试器的Visual Studio 2012启动我的C ++程序时,程序会在dll加载后立即关闭。调用堆栈显示正在调用FreeLibrary。

我在管理员模式下运行VS,并且在dll完全加载后附加调试器工作正常。在加载期间附加调试器会导致同样的问题。 从VS启动程序而不附加调试器也可以正常工作。

这个程序包含一个启动器(Game.exe),它加载一个dll(hw.dll),然后加载我正在尝试调试的DLL(client.dll)。一旦dll加载,程序就会关闭,并且因为程序调用了一个在加载dll后初始化的函数指针,它也会导致空指针调用。

这是堆栈跟踪:

00000000()  Unknown
[Frames below may be incorrect and/or missing]  
client.dll!AlertMessage(ALERT_TYPE atype, char * szFmt, ...) Line 129   C++
client.dll!MemoryDebug_CheckMemory(const char * pszMoment) Line 122 C++
client.dll!COnShutdownMemoryChecker::~COnShutdownMemoryChecker() Line 424   C++
client.dll!`dynamic atexit destructor for 'g_OnShutdownMemoryChecker''()    C++
client.dll!doexit(int code, int quick, int retcaller) Line 567  C
client.dll!_cexit() Line 408    C
client.dll!_CRT_INIT(void * hDllHandle, unsigned long dwReason, void * lpreserved) Line 174 C
client.dll!__DllMainCRTStartup(void * hDllHandle, unsigned long dwReason, void * lpreserved) Line 352   C
client.dll!_DllMainCRTStartup(void * hDllHandle, unsigned long dwReason, void * lpreserved) Line 293    C
ntdll.dll!_LdrxCallInitRoutine@16()    Unknown
ntdll.dll!LdrpCallInitRoutine() Unknown
ntdll.dll!LdrpProcessDetachNode()   Unknown
ntdll.dll!LdrpUnloadNode()  Unknown
ntdll.dll!LdrpDecrementNodeLoadCount()  Unknown
ntdll.dll!LdrUnloadDll()    Unknown
KernelBase.dll!_FreeLibrary@4()    Unknown
AcGenral.dll!NS_IgnoreFreeLibrary::APIHook_FreeLibrary(struct HINSTANCE__ *)    Unknown
GameOverlayRenderer.dll!0f57d78d()  Unknown
hw.dll!04a119f6()   Unknown

1 个答案:

答案 0 :(得分:0)

我知道上面问题的原因,但是你要调试的代码中的DebugBreak()呢? 从堆栈跟踪看,函数MemoryDe​​bug_CheckMemory似乎正在显示AlertMessage,然后启动退出。