StackFrame 建構函式
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
初始化 StackFrame 類別的新執行個體。
多載
| 名稱 | 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
備註
當你不想使用除錯器的線映射邏輯時,可以使用這個建構子。