2012-03-28 2 views
2

Visual Studio 2010과 C# ASP.NET을 사용하고 있습니다. F5 키를 사용하여 프로젝트를 실행하면 ASP.NET 개발 서버가 실행됩니다. IIS가 아니라 내 작업에 사용하는 서버입니다.ASP.NET 서버 오류의 줄 번호가 없습니다.

"서버 오류/응용 프로그램"처리되지 않은 예외 오류가 발생하면 오류 페이지에 줄 번호도 원본 파일 이름도 없습니다. 오류 설명 및 스택 추적. 예 :

Server Error in '/' Application. 
DataField must be specified. [or whatever error message] 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.InvalidOperationException: DataField must be specified. 
Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 
Stack Trace: 
[etc] 

디버그 모드로 컴파일 중입니다. 내 PDB가 내 프로젝트의 BIN 디렉토리에 생성됩니다. 웹의 프로젝트 속성에서 NTLM 인증이 해제되어 있습니다. 빌드에서 디버그 구성을 활성화하고, DEBUG와 일정 체크 박스가 켜져 TRACE, 내 프로젝트 속성에서 또한

<authentication mode="Forms"> 
[...] 
<customErrors mode="Off"/> 
[...] 
<compilation debug="true" targetFramework="4.0">. 

: 내 Web.config의에서 나는 다음과 같은 있습니다. 고급에서 내부 컴파일러 오류보고는 True로 설정되고 디버그 정보는 Full로 설정됩니다.

내가 실행중인 사용자 계정에는 그룹의 보안 정책에서 "프로그램 디버그"권한이 설정되어 있습니다.

저는 스택 오버플로 및 다른 곳에서이 질문을 연구했지만 제 상황에 맞는 대답을 찾지 못했습니다. 내가 찾은 한 가지 대답은 분명히 IIS에 적용되는 web.config에서 "impersonate = true"설정을 제거하는 것이지만 IIS를 사용하지 않고 내 구성 파일에도이 작업을 수행하지 않습니다. IIS 대신 VS 2010과 함께 제공되는 기본 제공 ASP.NET 개발 서버를 사용하고 있습니다. 또 다른 대답은 심볼 서버를 설정하고 _NT_SYMBOL_PATH env 변수를 설정했지만 이것이 내가하는 일에 적용되는지는 알 수 없습니다.

모든 설정에 기본 설정과 구성을 사용하고 있기 때문에 혼란 스럽습니다. 대부분의 개발자가 겪게 될 공통적 인 문제 일 것 같습니다. 다른 모든 사람들이 게시를 사용하고 IIS를 통해 개발을 수행하지 않는 한. 덧붙여 말하자면 나는 줄 번호를 얻는 지 알아보기 위해 IIS를 사용하지 않았다. 하지만 내장 된 ASP.NET Development Server를 사용하고 싶습니다. 기본적으로 예외에 대한 전체 디버그/추적 정보를 표시하고, VS 2010과 통합하여 예외를 해결하고 코드를 단계별로 처리하도록하겠습니다. 그러나 어쩌면 나는 너무 많이 요구하고있다. 누군가?

후속 조사를 (. 당신이 제안 솔루션으로 대답하면, 먼저 나는 이미 당신이 제안하고 설정되어 있는지 볼 수 있도록, 위의 내 설정의 세부 사항을 읽어주세요) : 나는 IIS와 시도 나는 줄 번호를 얻는다. 그러나 경량의 개발 서버를 대신 사용하기 때문에이 문제가 해결되지 않습니다.

답변

2

.CS 원본 파일에서 .CSP 원본 파일이 예외를 throw했을 때 줄 번호가 잘 보이지만 예외가 발생하지 않았 음을 알았습니다. .ASPX 자체의 경우 IIS 또는 개발 서버에서 줄 번호와 소스 코드 발췌 부분이 전혀 나타나지 않았습니다. (이것은 원래 내 질문에이 문제를 어떻게 설명했는지 정확히 알 수 없기 때문에 약간 명확 해집니다.) 제 동료 중 한 사람이 이것이 정상적인 행동이며 주변에는 방법이 없다고 말했습니다. 그는 ASPX 페이지에서 예외가있는 행을 추측해야한다는 것을 암시합니다.

그러나 더 많은 조사가 끝나면 나는 길을 찾았습니다! .ASPX 파일에서 예외가 발생할 때 줄 번호를 얻을 수 있습니다. 하지만 아직도 설정이 쉽지 않은 이유는 아직도 이해할 수 없습니다! 페이지 또는 프로젝트 레벨에서 코드 블록을 추가하는 대신에 옵션 일 수도 있습니다.

다음 코드는 각 페이지의 ASPX에 있어야합니다.CS 자체, 마스터 페이지, 도 아니고도 페이지 클래스에서 파생 된 상위 클래스에서 상속받을 수 있습니다. 이는 다른 클래스의 Page_Error 핸들러가 대신 호출되면 호출 스택이 영향을 받고 가장 최근 항목이 오류와 관련이 없기 때문입니다. (나는이 문제에 대해서도 호출 스택을 가로 지르며 해결책을 모색 중 이었지만, 시간이 없어서 지금 당장 포기했다.)

public void Page_Error(object sender, EventArgs e) 
{ 
Exception objErr = Server.GetLastError().GetBaseException(); 

StackTrace st = new StackTrace(new StackFrame(true)); 
StackFrame sf = st.GetFrame(0); 
Response.Write("File Name: " + sf.GetFileName().ToString() + "<br>"); 
Response.Write("Method Name: " + sf.GetMethod().Name.ToString() + "<br>"); 
Response.Write("Error Line Number: " + (sf.GetFileLineNumber() - 1) + "<br>"); // line numbers are offset by 1 for some reason 
Response.Write("Error Column Number: " + sf.GetFileColumnNumber().ToString() + "<br>"); 

Server.ClearError(); 
} 
+0

추가 참고 사항 : 또한 원래의 설명과 반대이다. Visual Studio 2010에서는 예외가 발생하여 코드를 단계별로 실행하지만, .ASPX 소스 파일이 아닌 .CS 소스 파일에서만 발생합니다. –

관련 문제