diff --git a/IDEHelper/DbgModule.cpp b/IDEHelper/DbgModule.cpp index 3849b990..d92e6fd4 100644 --- a/IDEHelper/DbgModule.cpp +++ b/IDEHelper/DbgModule.cpp @@ -6462,7 +6462,7 @@ bool DbgModule::ReadCOFF(DataStream* stream, DbgModuleKind moduleKind) if (needHotTargetMemory != 0) { - BF_ASSERT(needHotTargetMemory == mImageSize); + BF_ASSERT(needHotTargetMemory >= mImageSize); } //BF_ASSERT(mEndTypeIdx == (int)linkedModule->mTypes.size()); diff --git a/IDEHelper/DebugTarget.cpp b/IDEHelper/DebugTarget.cpp index 2187a388..ddc24ea5 100644 --- a/IDEHelper/DebugTarget.cpp +++ b/IDEHelper/DebugTarget.cpp @@ -103,21 +103,22 @@ void DebugTarget::SetupTargetBinary() addr_target reservedPtr = NULL; while ((addr_target)checkHotReserveAddr < (addr_target)mTargetBinary->mImageBase + 0x30000000) - { + { reservedPtr = (addr_target)VirtualAllocEx(mDebugger->mProcessInfo.hProcess, (void*)(intptr)checkHotReserveAddr, reserveSize, MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (reservedPtr != NULL) break; checkHotReserveAddr += 4 * mb; } - if (reservedPtr != 0) + if (reservedPtr == 0) + { + mDebugger->Fail("Failed to reserve memory for hot swapping"); + } + else { BF_ASSERT(mHotHeap == NULL); mHotHeap = new HotHeap(reservedPtr, reserveSize); } - - //TODO: Throw actual error if we can't reserve HOT area - BF_ASSERT(reservedPtr != NULL); } #endif } diff --git a/IDEHelper/WinDebugger.cpp b/IDEHelper/WinDebugger.cpp index afa56eb3..d6325685 100644 --- a/IDEHelper/WinDebugger.cpp +++ b/IDEHelper/WinDebugger.cpp @@ -1061,6 +1061,18 @@ void WinDebugger::HotLoad(const Array& objectFiles, int hotIdx) { AutoCrit autoCrit(mDebugManager->mCritSect); + if (mDebugTarget->mTargetBinary == NULL) + { + Fail("Hot swapping failed because the hot target binary has not yet been loaded."); + return; + } + + if (mDebugTarget->mHotHeap == NULL) + { + Fail("There is no hot heap space available for hot swapping."); + return; + } + BfLogDbg("WinDebugger::HotLoad Start %d\n", hotIdx); SetAndRestoreValue prevHotIdx(mActiveHotIdx, hotIdx);