2009-09-08 1 views
4

나는 아주 간단한 aspect를 만들었고 그것을 디버깅 할 때 문제를 발견했다. (코드 참조). 메소드 출구에 중단 점을 설정하고 실제로 "입력"메소드 내에서 충돌합니다. PostSharp 1.5, Visual Studio 2008 SP1
알려진 버그입니까? 다른 해결 방법이 있습니까?PostSharp 및 디버깅 문제가 있습니까?

class Program 
{ 
    [MyAspect] 
    static void Main(string[] args) 
    { 
     Console.WriteLine("body"); 
    } // setting breakpoint here 
} 

[Serializable] 
class MyAspect : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionEventArgs eventArgs) 
    { // hits here actually! (debug mode) 
     Console.WriteLine("entry"); // hits here actually! (release mode) 
    } 

    public override void OnExit(MethodExecutionEventArgs eventArgs) 
    { 
     Console.WriteLine("exit"); 
    } 
} 

답변

3

일반적으로 디버깅 기호가 오래되었거나 실행중인 실행 파일과 일치하지 않는 경우에 발생합니다.

나는 PostSharp를 사용하며 이와 같은 것을 보지 못했습니다 ... 재 구축을 시도 했습니까? 또는 출력 폴더를 삭제 한 다음 건물을 만드시겠습니까?

편집 :

샘플을 실행했습니다. MyAspect 구현을 다른 파일로 이동하면 코드 디버깅을 시작할 때 "중단 점에 현재 충돌이 발생하지 않고 실행 파일이이 줄과 연결되어 있지 않습니다 ..."

적용되는 양상은 일어나지 않습니다. 그래서 네, 포스트 컴파일 단계에서 뭔가가 문제를 일으키는 것 같습니다.

여기에 질문의 명확한 설명으로 남겨 두겠습니다. 그게 유용하지 않다고 생각하면 나는 그것을 삭제할 수 있습니다 ...

편집 2 : 해결 방법 : 중단 점을 닫는 중괄호가 아닌 이전 줄로 설정 한 다음 메소드의 코드 ...

+0

다시 작성/정리로 아무 것도 변경되지 않습니다. 샘플을 실행 해 보셨습니까? – skevar7

+0

이것은 .pdb 문제인 것 같습니다. PostSharp는 어셈블리 만 수정하지만 디버그 기호 파일은 수정하지 않습니다. – boj

0

이 문제에 대한 해결책을 찾고있는 중에이 스레드를 발견했습니다. 나는 똑같은 문제를 안고 그것에 대해 뭔가를 발견했다.

그것은 빌드 과정에서 일어나는 일들과 관련이있다. (나는 정말로 모른다.)

  • 빌드 어셈블리
  • 빌드 다시 그들을 위해 .PDB 작성, postsharp 코드
  • 을 적용 : 내 생각은 (정리가 내 경우에는 문제가되지 않습니다) 빌드/다시 할 때 어떤 일이 일어나는지 다음과 같다
  • .PDB 년대는 (내가 생각!) 다시 생성되지 않습니다 의미

다음의 .pdb 코드를 일치하지 않는 경우가 디버깅. 왜 내가 이런 식으로 생각하니? 음, 만약 내가 어셈블리에서 postsharp를 사용하지 않으면, 모든 것이 잘 동작합니다. 이 테스트 "= 문자열 str을"같은 간단한 코드를 사용하는 경우 "; 네이더 Shirazie가 언급 한 바와 같이 이있다"실행 코드와 관련이없는 "진짜".. 내가 동의 할 수

을 난 아직도 검색하고 " 솔루션입니다. 내 현재 해결 방법, 어셈블리에 대한 postsharp 비활성화, 물론, 물론, 측면을 디버깅 할뿐만 아니라 만족하지 않습니다. maybee 그냥 간단한 설정입니다. 나는 생산성을 향상시킬 것입니다 postsharp 같은 도구를 상상할 수 없다. 그리고 품질, 디버깅이 실패하게 ... 아무도?

내가 잘못 될 수 있지만 그것은 내 경우처럼 보이는 ...

환호, 옌스

0

이 브레이크 포인트 라인과 모든 예외 라인 번호 라인의 'X'양만큼 모두 꺼져 귀하의 방법으로 PostSharp "주입한다"코드 프로젝트를 컴파일 할 때 때문인 것으로 보인다 . 디 컴파일 된 .dll을보고 PostSharp가 .pdb 파일이 .dll과 동기화되지 않도록 코드베이스에 삽입 한 코드를 모두 볼 수 있습니다.

+0

일반적으로 PostSharp는 새 .dll과 일치하도록 .pdb 파일을 수정합니다. 동기화되지 않은 문제는 버그 또는 일부 비 호환성 (예 : .pdb 형식의 변경)으로 인해 발생합니다. – AlexD