릴리스 모드에서 빌드 / 배포 된 .NET 어셈블리의 스택 추적에 행을 표시하는 방법이 있습니까?
최신 정보:
내 응용 프로그램은 3 개의 클래스 라이브러리 프로젝트와 하나의 ASP.NET “웹 사이트”프로젝트로 나뉩니다. 내가 추적하려고하는 오류는 세 가지 클래스 라이브러리 프로젝트 중 하나에 있습니다. “개체 참조가 개체의 인스턴스로 설정되지 않았습니다”오류를 생성하는 클래스 라이브러리 프로젝트에 대한 pdb 파일 만 배포했습니다.
줄 번호는 여전히 스택 추적에 표시되지 않습니다. 스택 추적에서 줄 번호를 얻으려면 모든 프로젝트에 pdb 파일을 배포해야합니까?
작업 솔루션
각 응용 프로그램에 대해 pdb 파일을 배포하면 줄 번호 문제가 해결되었습니다.
답변
- 스택 추적 행 번호를 보려는 프로젝트의 속성 창으로 이동하십시오.
- “수직 탭”빌드를 클릭하십시오.
- “릴리스”구성을 선택하십시오.
DEBUG 상수 매개 변수를 확인하십시오. - 인라인 코드에서 가끔 발생하는 추적 문제를 피하려면 “코드 최적화”매개 변수를 선택 취소하십시오 (이 단계는 필수는 아닙니다).
- 고급 … 단추를 누르고 출력-> 디버그 정보-> pdb 전용을 선택하십시오.
- 생성 된 .pdb 파일을 어셈블리와 함께 배포하십시오.
아래 주석으로 구현되었습니다.
- 확인해야 할 또 다른 사항은 “패키지 / 게시 웹”섹션에서 “생성 된 디버그 기호 제외”확인란도 선택하지 않은 것입니다.
답변
VS2012에서는 속성의 패키지 / 게시 웹 섹션에서 “생성 된 디버그 심볼 제외”를 선택 취소해야합니다.
답변
내 솔루션
pdb 파일을 실행 파일과 같은 폴더에 복사하십시오.
이제 exe 파일을 실행할 때 줄 번호를 볼 수 있습니다.
이것이 이유이다
http://msdn.microsoft.com/en-us/library/ee416588%28v=vs.85%29.aspx
답변
과거에는 오류를 추적하기 위해 릴리스 빌드로 PDB 파일을 배포해야한다고 생각하는 문제가 발생했습니다. 그 이유는 당신이 말했듯이 예외가 매우 큰 방법으로 발생했기 때문에 예외가 발생하는 곳을 정확하게 지적 할 수 없었기 때문입니다.
이는 방법을 더 작고 세분화 된 방법으로 리팩토링해야 함을 나타낼 수 있습니다. 하나의 크기가 모든 대답에 맞지는 않지만이 접근법은 단기적으로 (리팩토링 중에 버그를 자주 발견했습니다) 장기적으로 도움이되었습니다.
그냥 생각이야
답변
빌드 / 배포 패키지에 디버그 기호를 포함하십시오.
답변
VS 2008 Express에서는 프로젝트 속성-> 컴파일-> 고급 컴파일 옵션에서 찾았습니다.
답변
이것은 매번 작동합니다. 스택 추적 메시지를 서브 스트링해야합니다. 진짜 쉬워요! 또한 vb.net에서는 “모든 파일 표시”를 수행하고 pdb를 포함해야합니다.
'Err is the exception passed to this function
Dim lineGrab As String = err.StackTrace.Substring(err.StackTrace.Length - 5)
Dim i As Integer = 0
While i < lineGrab.Length
If (IsNumeric(lineGrab(i))) Then
lineNo.Append(lineGrab(i))
End If
i += 1
End While
'LineNo holds the number as a string
C # 버전 :
string lineGrab = error.StackTrace.Substring(error.StackTrace.Length - 5);
int i = 0;
int value;
while (i < lineGrab.Length)
{
if (int.TryParse(lineGrab[i].ToString(), out value))
{
strLineNo.Append(lineGrab[i]);
}
i++;
}