// See the LICENSE file in the project root for more information.
using System.Text;
-using System;
-using System.IO;
-using System.Reflection;
namespace System.Diagnostics
{
- /// <summary>
- /// There is no good reason for the methods of this class to be virtual.
- /// </summary>
public partial class StackFrame
{
/// <summary>
/// Called from the class "StackTrace"
/// </summary>
- internal StackFrame(bool DummyFlag1, bool DummyFlag2)
+ internal StackFrame(StackFrameHelper stackFrameHelper, int skipFrames, bool needFileInfo)
{
- InitMembers();
+ _method = stackFrameHelper.GetMethodBase(skipFrames);
+ _nativeOffset = stackFrameHelper.GetOffset(skipFrames);
+ _ilOffset = stackFrameHelper.GetILOffset(skipFrames);
+ _isLastFrameFromForeignExceptionStackTrace = stackFrameHelper.IsLastFrameFromForeignExceptionStackTrace(skipFrames);
+
+ if (needFileInfo)
+ {
+ _fileName = stackFrameHelper.GetFilename(skipFrames);
+ _lineNumber = stackFrameHelper.GetLineNumber(skipFrames);
+ _columnNumber = stackFrameHelper.GetColumnNumber(skipFrames);
+ }
}
private void BuildStackFrame(int skipFrames, bool needFileInfo)
for (int i = 0; i < _numOfFrames; i++)
{
- bool fDummy1 = true;
- bool fDummy2 = true;
- StackFrame sfTemp = new StackFrame(fDummy1, fDummy2);
-
- sfTemp.SetMethodBase(StackF.GetMethodBase(i));
- sfTemp.SetOffset(StackF.GetOffset(i));
- sfTemp.SetILOffset(StackF.GetILOffset(i));
-
- sfTemp.SetIsLastFrameFromForeignExceptionStackTrace(StackF.IsLastFrameFromForeignExceptionStackTrace(i));
-
- if (fNeedFileInfo)
- {
- sfTemp.SetFileName(StackF.GetFilename(i));
- sfTemp.SetLineNumber(StackF.GetLineNumber(i));
- sfTemp.SetColumnNumber(StackF.GetColumnNumber(i));
- }
-
- _stackFrames[i] = sfTemp;
+ _stackFrames[i] = new StackFrame(StackF, i, fNeedFileInfo);
}
// CalculateFramesToSkip skips all frames in the System.Diagnostics namespace,
// See the LICENSE file in the project root for more information.
using System.Text;
-using System;
-using System.IO;
using System.Reflection;
namespace System.Diagnostics
private void InitMembers()
{
- _method = null;
_nativeOffset = OFFSET_UNKNOWN;
_ilOffset = OFFSET_UNKNOWN;
- _fileName = null;
- _lineNumber = 0;
- _columnNumber = 0;
- _isLastFrameFromForeignExceptionStackTrace = false;
}
/// <summary>
public StackFrame()
{
InitMembers();
- BuildStackFrame(0 + StackTrace.METHODS_TO_SKIP, false);
+ BuildStackFrame(StackTrace.METHODS_TO_SKIP, false);
}
/// <summary>
public StackFrame(bool needFileInfo)
{
InitMembers();
- BuildStackFrame(0 + StackTrace.METHODS_TO_SKIP, needFileInfo);
+ BuildStackFrame(StackTrace.METHODS_TO_SKIP, needFileInfo);
}
/// <summary>
public StackFrame(string fileName, int lineNumber)
{
InitMembers();
+
BuildStackFrame(StackTrace.METHODS_TO_SKIP, false);
_fileName = fileName;
_lineNumber = lineNumber;
- _columnNumber = 0;
}
/// <summary>
/// use the debugger's line mapping logic.
/// </summary>
public StackFrame(string fileName, int lineNumber, int colNumber)
+ : this (fileName, lineNumber)
{
- InitMembers();
- BuildStackFrame(StackTrace.METHODS_TO_SKIP, false);
- _fileName = fileName;
- _lineNumber = lineNumber;
_columnNumber = colNumber;
}
/// </summary>
public const int OFFSET_UNKNOWN = -1;
- internal virtual void SetMethodBase(MethodBase mb)
- {
- _method = mb;
- }
-
- internal virtual void SetOffset(int iOffset)
- {
- _nativeOffset = iOffset;
- }
-
- internal virtual void SetILOffset(int iOffset)
- {
- _ilOffset = iOffset;
- }
-
- internal virtual void SetFileName(string strFName)
- {
- _fileName = strFName;
- }
-
- internal virtual void SetLineNumber(int iLine)
- {
- _lineNumber = iLine;
- }
-
- internal virtual void SetColumnNumber(int iCol)
- {
- _columnNumber = iCol;
- }
-
- internal virtual void SetIsLastFrameFromForeignExceptionStackTrace(bool fIsLastFrame)
- {
- _isLastFrameFromForeignExceptionStackTrace = fIsLastFrame;
- }
-
- internal virtual bool GetIsLastFrameFromForeignExceptionStackTrace()
- {
- return _isLastFrameFromForeignExceptionStackTrace;
- }
+ internal bool IsLastFrameFromForeignExceptionStackTrace => _isLastFrameFromForeignExceptionStackTrace;
/// <summary>
/// Returns the method the frame is executing
sb.Append(_nativeOffset);
sb.Append(" in file:line:column ");
-
- bool useFileName = (_fileName != null);
-
- if (!useFileName)
- sb.Append("<filename unknown>");
- else
- sb.Append(_fileName);
+ sb.Append(_fileName ?? "<filename unknown>");
sb.Append(':');
sb.Append(_lineNumber);
sb.Append(':');