StackFrame 생성자
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
StackFrame 클래스의 새 인스턴스를 초기화합니다.
오버로드
| Name | Description |
|---|---|
| StackFrame() |
StackFrame 클래스의 새 인스턴스를 초기화합니다. |
| StackFrame(Int32) |
현재 스택 프레임 위의 프레임에 StackFrame 해당하는 클래스의 새 인스턴스를 초기화합니다. |
| StackFrame(Boolean) |
필요에 따라 원본 정보를 캡처하여 클래스의 StackFrame 새 인스턴스를 초기화합니다. |
| StackFrame(String, Int32) |
지정된 파일 이름 및 줄 번호만 포함하는 클래스의 StackFrame 새 인스턴스를 초기화합니다. |
| StackFrame(Int32, Boolean) |
필요에 따라 원본 정보를 캡처하여 현재 스택 프레임 위의 프레임에 해당하는 클래스의 StackFrame 새 인스턴스를 초기화합니다. |
| StackFrame(String, Int32, Int32) |
지정된 파일 이름, 줄 번호 및 열 번호만 포함하는 클래스의 StackFrame 새 인스턴스를 초기화합니다. |
StackFrame()
StackFrame(Int32)
현재 스택 프레임 위의 프레임에 StackFrame 해당하는 클래스의 새 인스턴스를 초기화합니다.
public:
StackFrame(int skipFrames);
public StackFrame(int skipFrames);
new System.Diagnostics.StackFrame : int -> System.Diagnostics.StackFrame
Public Sub New (skipFrames As Integer)
매개 변수
- skipFrames
- Int32
건너뛸 스택의 프레임 수입니다.
예제
다음 예제에서는 생성자의 사용을 StackFrame(Int32) 보여 줍니다. 이 코드 예제는 클래스에 제공된 더 큰 예제의 StackFrame 일부입니다.
public void InternalMethod()
{
try
{
ClassLevel2 nestedClass = new ClassLevel2();
nestedClass.Level2Method();
}
catch (Exception e)
{
Console.WriteLine(" InternalMethod exception handler");
// Build a stack trace from one frame, skipping the
// current frame and using the next frame. By
// default, file and line information are not displayed.
StackTrace st = new StackTrace(new StackFrame(1));
Console.WriteLine(" Stack trace for next level frame: {0}",
st.ToString());
Console.WriteLine(" Stack frame for next level: ");
Console.WriteLine(" {0}", st.GetFrame(0).ToString());
Console.WriteLine(" Line Number: {0}",
st.GetFrame(0).GetFileLineNumber().ToString());
Console.WriteLine();
Console.WriteLine(" ... throwing exception to next level ...");
Console.WriteLine("-------------------------------------------------\n");
throw e;
}
}
Public Sub InternalMethod()
Try
Dim nestedClass As New ClassLevel2
nestedClass.Level2Method()
Catch e As Exception
Console.WriteLine(" InternalMethod exception handler")
' Build a stack trace from one frame, skipping the
' current frame and using the next frame. By default,
' file and line information are not displayed.
Dim st As New StackTrace(New StackFrame(1))
Console.WriteLine(" Stack trace for next level frame: {0}", _
st.ToString())
Console.WriteLine(" Stack frame for next level: ")
Console.WriteLine(" {0}", st.GetFrame(0).ToString())
Console.WriteLine(" Line Number: {0}", _
st.GetFrame(0).GetFileLineNumber().ToString())
Console.WriteLine()
Console.WriteLine(" ... throwing exception to next level ...")
Console.WriteLine("-------------------------------------------------")
Console.WriteLine()
Throw e
End Try
End Sub
적용 대상
StackFrame(Boolean)
필요에 따라 원본 정보를 캡처하여 클래스의 StackFrame 새 인스턴스를 초기화합니다.
public:
StackFrame(bool fNeedFileInfo);
public StackFrame(bool fNeedFileInfo);
new System.Diagnostics.StackFrame : bool -> System.Diagnostics.StackFrame
Public Sub New (fNeedFileInfo As Boolean)
매개 변수
- fNeedFileInfoneedFileInfo
- Boolean
true스택 프레임의 파일 이름, 줄 번호 및 열 번호를 캡처하려면 그렇지 않으면 . false
예제
다음 예제에서는 생성자의 사용을 StackFrame(Boolean) 보여 줍니다. 이 코드 예제는 클래스에 제공된 더 큰 예제의 StackFrame 일부입니다.
[STAThread]
static void Main()
{
ClassLevel1 mainClass = new ClassLevel1();
try {
mainClass.InternalMethod();
}
catch (Exception) {
Console.WriteLine(" Main method exception handler");
// Display file and line information, if available.
StackTrace st = new StackTrace(new StackFrame(true));
Console.WriteLine(" Stack trace for current level: {0}",
st.ToString());
Console.WriteLine(" File: {0}",
st.GetFrame(0).GetFileName());
Console.WriteLine(" Line Number: {0}",
st.GetFrame(0).GetFileLineNumber().ToString());
Console.WriteLine();
Console.WriteLine("-------------------------------------------------\n");
}
}
<STAThread()> _
Shared Sub Main()
Dim mainClass As New ClassLevel1
Try
mainClass.InternalMethod()
Catch
Console.WriteLine(" Main method exception handler")
' Display file and line information, if available.
Dim st As New StackTrace(New StackFrame(True))
Console.WriteLine(" Stack trace for current level: {0}", _
st.ToString())
Console.WriteLine(" File: {0}", _
st.GetFrame(0).GetFileName())
Console.WriteLine(" Line Number: {0}", _
st.GetFrame(0).GetFileLineNumber().ToString())
Console.WriteLine()
Console.WriteLine("-------------------------------------------------")
Console.WriteLine()
End Try
End Sub
적용 대상
StackFrame(String, Int32)
지정된 파일 이름 및 줄 번호만 포함하는 클래스의 StackFrame 새 인스턴스를 초기화합니다.
public:
StackFrame(System::String ^ fileName, int lineNumber);
public StackFrame(string fileName, int lineNumber);
new System.Diagnostics.StackFrame : string * int -> System.Diagnostics.StackFrame
Public Sub New (fileName As String, lineNumber As Integer)
매개 변수
- fileName
- String
파일 이름입니다.
- lineNumber
- Int32
지정된 파일의 줄 번호입니다.
예제
다음 예제에서는 생성자의 사용을 StackFrame(String, Int32) 보여 줍니다. 이 코드 예제는 클래스에 제공된 더 큰 예제의 StackFrame 일부입니다.
public void Level3Method()
{
try
{
ClassLevel4 nestedClass = new ClassLevel4();
nestedClass.Level4Method();
}
catch (Exception e)
{
Console.WriteLine(" Level3Method exception handler");
// Build a stack trace from a dummy stack frame.
// Explicitly specify the source file name and
// line number.
StackTrace st = new StackTrace(new StackFrame("source.cs", 60));
Console.WriteLine(" Stack trace with dummy stack frame: {0}",
st.ToString());
for(int i =0; i< st.FrameCount; i++ )
{
// Display the stack frame properties.
StackFrame sf = st.GetFrame(i);
Console.WriteLine(" File: {0}", sf.GetFileName());
Console.WriteLine(" Line Number: {0}",
sf.GetFileLineNumber());
// Note that the column number defaults to zero
// when not initialized.
Console.WriteLine(" Column Number: {0}",
sf.GetFileColumnNumber());
if (sf.GetILOffset() != StackFrame.OFFSET_UNKNOWN)
{
Console.WriteLine(" Intermediate Language Offset: {0}",
sf.GetILOffset());
}
if (sf.GetNativeOffset() != StackFrame.OFFSET_UNKNOWN)
{
Console.WriteLine(" Native Offset: {0}",
sf.GetNativeOffset());
}
}
Console.WriteLine();
Console.WriteLine(" ... throwing exception to next level ...");
Console.WriteLine("-------------------------------------------------\n");
throw e;
}
}
Public Sub Level3Method()
Try
Dim nestedClass As New ClassLevel4()
nestedClass.Level4Method()
Catch e As Exception
Console.WriteLine(" Level3Method exception handler")
' Build a stack trace from a dummy stack frame.
' Explicitly specify the source file name and line number.
Dim st As New StackTrace(New StackFrame("source.cs", 60))
Console.WriteLine(" Stack trace with dummy stack frame: {0}", _
st.ToString())
Dim i As Integer
For i = 0 To st.FrameCount - 1
' Display the stack frame properties.
Dim sf As StackFrame = st.GetFrame(i)
Console.WriteLine(" File: {0}", sf.GetFileName())
Console.WriteLine(" Line Number: {0}", _
sf.GetFileLineNumber())
' The column number defaults to zero when not initialized.
Console.WriteLine(" Column Number: {0}", _
sf.GetFileColumnNumber())
If sf.GetILOffset <> StackFrame.OFFSET_UNKNOWN
Console.WriteLine(" Intermediate Language Offset: {0}", _
sf.GetILOffset())
End If
If sf.GetNativeOffset <> StackFrame.OFFSET_UNKNOWN
Console.WriteLine(" Native Offset: {0}", _
sf.GetNativeOffset())
End If
Next i
Console.WriteLine()
Console.WriteLine(" ... throwing exception to next level ...")
Console.WriteLine("-------------------------------------------------")
Console.WriteLine()
Throw e
End Try
End Sub
설명
디버거의 줄 매핑 논리를 사용하지 않으려면 이 생성자를 사용합니다.
적용 대상
StackFrame(Int32, Boolean)
필요에 따라 원본 정보를 캡처하여 현재 스택 프레임 위의 프레임에 해당하는 클래스의 StackFrame 새 인스턴스를 초기화합니다.
public:
StackFrame(int skipFrames, bool fNeedFileInfo);
public StackFrame(int skipFrames, bool fNeedFileInfo);
new System.Diagnostics.StackFrame : int * bool -> System.Diagnostics.StackFrame
Public Sub New (skipFrames As Integer, fNeedFileInfo As Boolean)
매개 변수
- skipFrames
- Int32
건너뛸 스택의 프레임 수입니다.
- fNeedFileInfoneedFileInfo
- Boolean
true스택 프레임의 파일 이름, 줄 번호 및 열 번호를 캡처하려면 그렇지 않으면 . false
예제
다음 예제에서는 생성자의 사용을 StackFrame(Int32, Boolean) 보여 줍니다. 이 코드 예제는 클래스에 제공된 더 큰 예제의 StackFrame 일부입니다.
public void Level2Method()
{
try
{
ClassLevel3 nestedClass = new ClassLevel3();
nestedClass.Level3Method();
}
catch (Exception e)
{
Console.WriteLine(" Level2Method exception handler");
// Display the full call stack at this level.
StackTrace st1 = new StackTrace(true);
Console.WriteLine(" Stack trace for this level: {0}",
st1.ToString());
// Build a stack trace from one frame, skipping the current
// frame and using the next frame.
StackTrace st2 = new StackTrace(new StackFrame(1, true));
Console.WriteLine(" Stack trace built with next level frame: {0}",
st2.ToString());
// Build a stack trace skipping the current frame, and
// including all the other frames.
StackTrace st3 = new StackTrace(1, true);
Console.WriteLine(" Stack trace built from the next level up: {0}",
st3.ToString());
Console.WriteLine();
Console.WriteLine(" ... throwing exception to next level ...");
Console.WriteLine("-------------------------------------------------\n");
throw e;
}
}
Public Sub Level2Method()
Try
Dim nestedClass As New ClassLevel3
nestedClass.Level3Method()
Catch e As Exception
Console.WriteLine(" Level2Method exception handler")
' Display the full call stack at this level.
Dim st1 As New StackTrace(True)
Console.WriteLine(" Stack trace for this level: {0}", _
st1.ToString())
' Build a stack trace from one frame, skipping the current
' frame and using the next frame.
Dim st2 As New StackTrace(New StackFrame(1, True))
Console.WriteLine(" Stack trace built with next level frame: {0}", _
st2.ToString())
' Build a stack trace skipping the current frame, and
' including all the other frames.
Dim st3 As New StackTrace(1, True)
Console.WriteLine(" Stack trace built from the next level up: {0}", _
st3.ToString())
Console.WriteLine()
Console.WriteLine(" ... throwing exception to next level ...")
Console.WriteLine("-------------------------------------------------")
Console.WriteLine()
Throw e
End Try
End Sub
적용 대상
StackFrame(String, Int32, Int32)
지정된 파일 이름, 줄 번호 및 열 번호만 포함하는 클래스의 StackFrame 새 인스턴스를 초기화합니다.
public:
StackFrame(System::String ^ fileName, int lineNumber, int colNumber);
public StackFrame(string fileName, int lineNumber, int colNumber);
new System.Diagnostics.StackFrame : string * int * int -> System.Diagnostics.StackFrame
Public Sub New (fileName As String, lineNumber As Integer, colNumber As Integer)
매개 변수
- fileName
- String
파일 이름입니다.
- lineNumber
- Int32
지정된 파일의 줄 번호입니다.
- colNumber
- Int32
지정된 파일의 열 번호입니다.
예제
다음 예제에서는 생성자의 사용을 StackFrame 보여 줍니다. 이 코드 예제는 클래스에 제공된 더 큰 예제의 StackFrame 일부입니다.
try
{
ClassLevel5 nestedClass = new ClassLevel5();
nestedClass.Level5Method();
}
catch (Exception e)
{
Console.WriteLine(" Level4Method exception handler");
// Build a stack trace from a dummy stack frame.
// Explicitly specify the source file name, line number
// and column number.
StackTrace st = new StackTrace(new StackFrame("source.cs", 79, 24));
Console.WriteLine(" Stack trace with dummy stack frame: {0}",
st.ToString());
// Access the StackFrames explicitly to display the file
// name, line number and column number properties.
// StackTrace.ToString only includes the method name.
for(int i =0; i< st.FrameCount; i++ )
{
StackFrame sf = st.GetFrame(i);
Console.WriteLine(" File: {0}", sf.GetFileName());
Console.WriteLine(" Line Number: {0}",
sf.GetFileLineNumber());
Console.WriteLine(" Column Number: {0}",
sf.GetFileColumnNumber());
}
Console.WriteLine();
Console.WriteLine(" ... throwing exception to next level ...");
Console.WriteLine("-------------------------------------------------\n");
throw e;
}
Try
Dim [nestedClass] As New ClassLevel5()
[nestedClass].Level5Method()
Catch e As Exception
Console.WriteLine(" Level4Method exception handler")
' Build a stack trace from a dummy stack frame.
' Explicitly specify the source file name, line number
' and column number.
Dim st As New StackTrace(New StackFrame("source.cs", 79, 24))
Console.WriteLine(" Stack trace with dummy stack frame: {0}", _
st.ToString())
' Access the StackFrames explicitly to display the file
' name, line number and column number properties.
' StackTrace.ToString only includes the method name.
Dim i As Integer
For i = 0 To st.FrameCount - 1
Dim sf As StackFrame = st.GetFrame(i)
Console.WriteLine(" File: {0}", sf.GetFileName())
Console.WriteLine(" Line Number: {0}", _
sf.GetFileLineNumber())
Console.WriteLine(" Column Number: {0}", _
sf.GetFileColumnNumber())
Next i
Console.WriteLine()
Console.WriteLine(" ... throwing exception to next level ...")
Console.WriteLine("-------------------------------------------------")
Console.WriteLine()
Throw e
End Try
End Sub
설명
디버거의 줄 매핑 논리를 사용하지 않으려면 이 생성자를 사용합니다.