2013-05-04 3 views
0

프로그래머가 사용할 라이브러리를 개발 중입니다. 예외가 발생하면 디버거는 예외가 발생한 곳으로 이동하고 클래스가 인스턴스화되거나 메소드가 실행 된 곳으로 이동하지 않습니다.클래스가 인스턴스화 된 예외를 throw합니다. - C#

try .. catch로 해결할 수 있지만 라이브러리를 사용하는 프로그래머가 try ... catch를 열지 않으면 어떻게 될까요? 그는 모든 코드를 볼 것입니다! 어떻게 이것을 피할 수 있습니까?

+1

코드 (클래스 또는 메서드)를 DebuggerNonUserCodeAttribute (http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx)로 표시해 보았습니까? –

답변

2

라이브러리의 릴리스 버전을 만들고 디버거 기호 (pdb)를 제공하지 않으면 라이브러리 사용자의 디버거가 코드를 표시하지 않아야합니다. OTOH, 반사경 같은 도구를 알고 있습니까? 귀하의 코드는 비밀이 아닙니다.

3

그는 내 모든 코드를 볼 것입니다!

코드를 배포하는 경우 네. 그렇지 않다면 어떻게 코드를 볼 수있을 것이라고 기대하십니까? 컴퓨터에 소스 코드가 있으므로 대부분의 개발자가 라이브러리를 사용하는 것과는 다른 상황에 처해 있음을 잊지 마십시오. 소스 코드가없는 컴퓨터에서 같은 DLL을 사용해보십시오.

개발자가 코드의 디 컴파일 된 버전을 볼 수 있습니다. 아마도 그렇게 큰 문제입니까? 그렇다면 코드를 난독 화하는 방법을 고려해야합니다.하지만 병참 학적 단점도 있습니다.

나는이 문제가 정말로 문제가 아니라고 생각합니다.

try 
    { 
     //exception code 
    } 
    catch (Exception e) 
    { 
     throw e; 
    } 

: 나는 당신이 당신의 코드 대신에 당신은 당신이이처럼 다시 발생 할 예외를 처리하는 catch 블록의 시도 캐치를 사용하려는 생각에 대한

0

은 당신이 찾고있는 것을 이해한다면 만약 내가 올바르게 기억한다면, 이렇게 던지면 스택 트레이스가 리셋되지만 스택을 사용하면 스택 트레이스를 유지할 수 있습니다.

관련 문제