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

Method FindSubProgram

IDEHelper/DebugTarget.cpp:792–901  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

790}
791
792DbgSubprogram* DebugTarget::FindSubProgram(addr_target pc, DbgOnDemandKind onDemandKind)
793{
794 BP_ZONE("WinDebugger::FindSubProgram");
795
796 for (int pass = 0; pass < 2; pass++)
797 {
798 int mapBlockSize = 1 << DbgRadixMap<DbgSubprogramMapEntry*>::BLOCK_SHIFT;
799
800 DbgSubprogram* foundSubprogram = NULL;
801
802 // Even though the radix map is LIFO, we might find an inline parent in an earlier block
803 // so we can't terminate the search until we exhaust the lookup
804 addr_target bestStart = 0;
805 for (int offset = 0; offset < DBG_MAX_LOOKBACK; offset += mapBlockSize)
806 {
807 DbgSubprogramMapEntry* subprogramMapEntry = mSubprogramMap.FindFirstLeafAt(pc - offset);
808 while (subprogramMapEntry != NULL)
809 {
810 auto dwSubprogram = subprogramMapEntry->mEntry;
811 if ((pc >= dwSubprogram->mBlock.mLowPC) && (pc < dwSubprogram->mBlock.mHighPC) && (dwSubprogram->mBlock.mLowPC > bestStart))
812 {
813 if ((dwSubprogram->mLineInfo != NULL) && (dwSubprogram->mLineInfo->mHasInlinees))
814 {
815 if (dwSubprogram->mNeedLineDataFixup)
816 mDebugger->FixupLineDataForSubprogram(dwSubprogram);
817
818 DbgSubprogram* inlinedSubprogram = NULL;
819 if (dwSubprogram->FindClosestLine(pc, &inlinedSubprogram) != NULL)
820 {
821 return inlinedSubprogram;
822 }
823 }
824
825 /*bool inGap = false;
826 if (dwSubprogram->mHasLineGaps)
827 {
828 mDebugger->FixupLineDataForSubprogram(dwSubprogram);
829 auto lineData = dwSubprogram->FindClosestLine(pc, 0, true);
830 inGap == (lineData == NULL) || (lineData->mLine == -1);
831 }
832
833 if (!inGap)
834 {
835 foundSubprogram = dwSubprogram;
836 bestStart = dwSubprogram->mBlock.mLowPC;
837 }
838 else
839 {
840 }*/
841
842 return dwSubprogram;
843 //foundSubprogram = dwSubprogram;
844 //bestStart = dwSubprogram->mBlock.mLowPC;
845 }
846 subprogramMapEntry = subprogramMapEntry->mNext;
847 }
848 }
849 if (foundSubprogram != NULL)

Callers 15

MatchMethodMethod · 0.80
ScanSpanMethod · 0.80
DoUpdateMethod · 0.80
FindLineDataAtAddressMethod · 0.80
CheckBreakpointMethod · 0.80
SetupStepMethod · 0.80
TryFollowHotJumpMethod · 0.80
DbgTypedValueToStringMethod · 0.80
EvaluateAtAddressMethod · 0.80
GetThreadInfoMethod · 0.80

Calls 7

FindClosestLineMethod · 0.80
FindFirstLeafAtMethod · 0.45
GetMethod · 0.45
ParseCompileUnitMethod · 0.45
EndsWithMethod · 0.45
RequestDebugInfoMethod · 0.45

Tested by

no test coverage detected