A의 catch
블록, 어떻게 예외를 던져 줄 번호를받을 수 있나요?
답변
Exception.StackTrace에서 가져온 형식이 지정된 스택 추적 이상의 행 번호가 필요한 경우 StackTrace 클래스를 사용할 수 있습니다 .
try
{
throw new Exception();
}
catch (Exception ex)
{
// Get stack trace for the exception with source file information
var st = new StackTrace(ex, true);
// Get the top stack frame
var frame = st.GetFrame(0);
// Get the line number from the stack frame
var line = frame.GetFileLineNumber();
}
이것은 어셈블리에 사용 가능한 pdb 파일이있는 경우에만 작동합니다.
답변
간단한 방법으로 Exception.ToString()
함수를 사용 하면 예외 설명 후에 줄을 반환합니다.
전체 응용 프로그램에 대한 디버그 정보 / 로그가 포함 된 프로그램 디버그 데이터베이스를 확인할 수도 있습니다.
답변
.PBO
파일 이없는 경우 :
씨#
public int GetLineNumber(Exception ex)
{
var lineNumber = 0;
const string lineSearch = ":line ";
var index = ex.StackTrace.LastIndexOf(lineSearch);
if (index != -1)
{
var lineNumberText = ex.StackTrace.Substring(index + lineSearch.Length);
if (int.TryParse(lineNumberText, out lineNumber))
{
}
}
return lineNumber;
}
Vb.net
Public Function GetLineNumber(ByVal ex As Exception)
Dim lineNumber As Int32 = 0
Const lineSearch As String = ":line "
Dim index = ex.StackTrace.LastIndexOf(lineSearch)
If index <> -1 Then
Dim lineNumberText = ex.StackTrace.Substring(index + lineSearch.Length)
If Int32.TryParse(lineNumberText, lineNumber) Then
End If
End If
Return lineNumber
End Function
또는 Exception 클래스의 확장으로
public static class MyExtensions
{
public static int LineNumber(this Exception ex)
{
var lineNumber = 0;
const string lineSearch = ":line ";
var index = ex.StackTrace.LastIndexOf(lineSearch);
if (index != -1)
{
var lineNumberText = ex.StackTrace.Substring(index + lineSearch.Length);
if (int.TryParse(lineNumberText, out lineNumber))
{
}
}
return lineNumber;
}
}
답변
당신은 포함 할 수 .PDB
메타 데이터 정보를 포함하고 예외가 발생 될 때이 예외가 발생한 위치의 스택 트레이스 전체 정보가 포함됩니다 어셈블리에 관련된 기호 파일을. 스택에있는 각 메소드의 행 번호를 포함합니다.
답변
효과가있다:
var LineNumber = new StackTrace(ex, True).GetFrame(0).GetFileLineNumber();
답변
이것 좀 봐
StackTrace st = new StackTrace(ex, true);
//Get the first stack frame
StackFrame frame = st.GetFrame(0);
//Get the file name
string fileName = frame.GetFileName();
//Get the method name
string methodName = frame.GetMethod().Name;
//Get the line number from the stack frame
int line = frame.GetFileLineNumber();
//Get the column number
int col = frame.GetFileColumnNumber();
답변
답변으로 업데이트
// Get stack trace for the exception with source file information
var st = new StackTrace(ex, true);
// Get the top stack frame
var frame = st.GetFrame(st.FrameCount-1);
// Get the line number from the stack frame
var line = frame.GetFileLineNumber();