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

Method GetCodeAddrInfo

IDEHelper/WinDebugger.cpp:11566–11642  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11564}
11565
11566void WinDebugger::GetCodeAddrInfo(intptr addr, intptr inlineCallAddr, String* outFile, int* outHotIdx, int* outDefLineStart, int* outDefLineEnd, int* outLine, int* outColumn)
11567{
11568 AutoCrit autoCrit(mDebugManager->mCritSect);
11569
11570 DbgSubprogram* subProgram = NULL;
11571 DbgLineData* callingLineData = FindLineDataAtAddress((addr_target)addr, &subProgram);
11572
11573 if (inlineCallAddr != 0)
11574 {
11575 auto inlinedSubProgram = mDebugTarget->FindSubProgram(inlineCallAddr);
11576 if (inlinedSubProgram != 0)
11577 {
11578 FixupLineDataForSubprogram(inlinedSubProgram->mInlineeInfo->mRootInliner);
11579 DbgSubprogram* parentSubprogram = inlinedSubProgram->mInlineeInfo->mInlineParent; // Require it be in the inline parent
11580 auto foundLine = parentSubprogram->FindClosestLine(inlinedSubProgram->mBlock.mLowPC, &parentSubprogram);
11581 if (foundLine != NULL)
11582 {
11583 auto srcFile = parentSubprogram->GetLineSrcFile(*foundLine);
11584 *outFile = srcFile->GetLocalPath();
11585 *outLine = foundLine->mLine;
11586 }
11587
11588 *outHotIdx = inlinedSubProgram->mCompileUnit->mDbgModule->mHotIdx;
11589 *outColumn = -1;
11590
11591 DbgSubprogram* callingSubProgram = NULL;
11592 DbgLineData* callingLineData = FindLineDataAtAddress(inlinedSubProgram->mBlock.mLowPC - 1, &callingSubProgram);
11593 if ((callingLineData != NULL) && (callingSubProgram == subProgram))
11594 {
11595 auto callingSrcFile = callingSubProgram->GetLineSrcFile(*callingLineData);
11596 auto srcFile = callingSrcFile;
11597 *outFile = srcFile->GetLocalPath();
11598
11599 if (*outLine == callingLineData->mLine)
11600 *outColumn = callingLineData->mColumn;
11601 }
11602 return;
11603 }
11604 }
11605
11606 if (subProgram != NULL)
11607 {
11608 if ((subProgram->mInlineeInfo != NULL) && ((addr_target)addr >= subProgram->mBlock.mHighPC))
11609 callingLineData = &subProgram->mInlineeInfo->mLastLineData;
11610
11611 *outHotIdx = subProgram->mCompileUnit->mDbgModule->mHotIdx;
11612 *outFile = subProgram->GetLineSrcFile(*callingLineData)->GetLocalPath();
11613 *outLine = callingLineData->mLine;
11614 *outColumn = callingLineData->mColumn;
11615
11616 FixupLineDataForSubprogram(subProgram);
11617 DbgLineData* dwStartLineData = NULL;
11618 DbgLineData* dwEndLineData = NULL;
11619 if (subProgram->mLineInfo != NULL)
11620 {
11621 if (subProgram->mLineInfo->mLines.size() > 0)
11622 {
11623 dwStartLineData = &subProgram->mLineInfo->mLines[0];

Callers 1

Calls 5

FindSubProgramMethod · 0.80
FindClosestLineMethod · 0.80
GetLineSrcFileMethod · 0.80
sizeMethod · 0.45
backMethod · 0.45

Tested by

no test coverage detected