diff --git a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/StackWalk/StackWalk_1.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/StackWalk/StackWalk_1.cs index 281bf58b6d3fe3..efdbbd7041a5c6 100644 --- a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/StackWalk/StackWalk_1.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/StackWalk/StackWalk_1.cs @@ -97,6 +97,15 @@ private bool Next(StackWalkData handle) { handle.FrameIter.Next(); } + else if (!IsManaged(handle.Context.InstructionPointer, out _)) + { + // The InlinedCallFrame has an active call but the caller's IP is not + // in a known managed code range (e.g. partial dump without JIT code + // heaps). Advance past the frame to prevent an infinite loop — without + // managed code range data the walker would repeatedly re-process the + // same InlinedCallFrame. + handle.FrameIter.Next(); + } break; case StackWalkState.SW_ERROR: case StackWalkState.SW_COMPLETE: