MCPcopy Create free account
hub / github.com/beefytech/Beef / UpdateCallStack

Method UpdateCallStack

IDEHelper/WinDebugger.cpp:11286–11384  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11284}
11285
11286void WinDebugger::UpdateCallStack(bool slowEarlyOut)
11287{
11288 AutoCrit autoCrit(mDebugManager->mCritSect);
11289
11290 if (!mIsPartialCallStack)
11291 return;
11292
11293 if (mActiveThread == NULL)
11294 return;
11295
11296 if (IsInRunState())
11297 return;
11298
11299 uint32 tickStart = BFTickCount();
11300
11301 CPURegisters registers;
11302
11303 if (mCallStack.size() > 0)
11304 {
11305 WdStackFrame* wdStackFrame = mCallStack.back();
11306 if (wdStackFrame->mIsEnd)
11307 {
11308 return;
11309 }
11310 memcpy(&registers, &wdStackFrame->mRegisters, sizeof(registers));
11311 bool regsRolledBack = RollBackStackFrame(&registers, mCallStack.size() == 1);
11312 // If we can't roll them back then mIsEnd should have been set for the previous frame
11313 BF_ASSERT(regsRolledBack);
11314 }
11315 else
11316 {
11317 BF_ASSERT(mIsPartialCallStack);
11318 mCallStack.Reserve(1024);
11319 PopulateRegisters(&registers);
11320 BfLogDbg("UpdateCallStack starting. Thread=%d PC=0x%p\n", mActiveThread->mThreadId, registers.GetPC());
11321 }
11322
11323 bool isPartial = false;
11324
11325 // Incrementally fill callstack structure to avoid stepping slowdown during deep nesting
11326 for (int fillIdx = 0; fillIdx < (slowEarlyOut ? 10000 : 100000); fillIdx++)
11327 {
11328 WdStackFrame* wdStackFrame = new WdStackFrame();
11329 memcpy(&wdStackFrame->mRegisters, &registers, sizeof(registers));
11330 wdStackFrame->mIsStart = mCallStack.size() == 0;
11331 wdStackFrame->mIsEnd = false;
11332
11333 bool rollbackSuccess = false;
11334 for (int tryCount = 0; tryCount < 16; tryCount++)
11335 {
11336 if (!RollBackStackFrame(&registers, wdStackFrame->mIsStart))
11337 {
11338 break;
11339 }
11340 if (registers.GetPC() > 0xFFFF)
11341 {
11342 rollbackSuccess = true;
11343 break;

Callers 4

GetStackFrameMethod · 0.45
LookupIdentifierMethod · 0.45
CallStack_UpdateFunction · 0.45
PopulateHotCallstacksMethod · 0.45

Calls 6

sizeMethod · 0.45
backMethod · 0.45
ReserveMethod · 0.45
GetPCMethod · 0.45
GetSPMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected