c\#이상 이 없 는 상태 에서 현재 호출 스 택 의 해결 방법 을 봅 니 다.

3109 단어 c#호출 스 택
C\#스 택 을 보 는 것 은 보통 이상 처리 중 입 니 다.이상 이 발생 한 후에 이상 한 스 택 을 통 해 이 오류 가 발생 한 코드 호출 경 로 를 편리 하 게 얻 을 수 있 습 니 다.이것 은 매우 유용 하 다.이상 이 없 을 때 이런 방법 으로 이상 하지 않 은 오 류 를 조사 할 수 있 습 니까?답 은 긍정 적 이다.원인:게시판 에 글 을 올 리 는 데 몇 가지 경로 가 있 습 니 다.뉴스 시스템 이 직접 가 져 온 게시 물 일 수도 있 고 캡 처 한 게시 물 일 수도 있 으 며 사용자 가 정상 적 인 경 로 를 통 해 발표 할 수도 있 습 니 다.그런데 요 며칠 문제 가 생 겼 어 요.일부 게시 물의 HasImage 속성 이 맞지 않 아 요.몇 가지 방법 으로 디 버 깅 을 해도 문 제 를 재현 할 수 없습니다.어 쩔 수 없습니다.프로그램 에 답장 을 추가 한 곳 에 로그 프로그램 을 추가 하여 스 택 을 기록 하고 어떤 경로 로 글 을 올 렸 는 지 추적 할 수 있 습 니 다.코드:

[PostProviderExtension]
public class HasImageErrorCheckerPostExtension : IPostProviderExtension
{
    public void BindEvents(PostProviderBase postProvider)
    {
        postProvider.Added += new PostChanged(postProvider_Added);
    }

    void postProvider_Added(Model.PostInfo post)
    {
        try
        {
            StackFrame[] stacks = new StackTrace().GetFrames();
            if (post.Content.IndexOf("IMG") > -1 && post.HasImage == false)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine(" ");
                sb.AppendLine("stack is:");
                sb.Append(ToString(stacks));

                sb.Append("content=");
                sb.AppendLine(post.Content);

                sb.Append("HasImage=");
                sb.AppendLine(UserPostContentProcessor.HasImage(post.Content).ToString());

                sb.Append("createUserID=");
                sb.AppendLine(post.CreateUserID.ToString());
                sb.AppendLine(string.Format("LoginUser={0},Level={1}",PageBase.GetLoginUser().ID,PageBase.GetLoginUser().LevelNo));

                TextLogWriter.NamedInstance("\\log\\HasImageErrorCheckerPostExtension\\").Write(sb.ToString());
            }
        }
        catch (Exception ex)
        { 
            TextLogWriter.NamedInstance("\\log\\HasImageErrorCheckerPostExtension\\").Write(ex);
        }
    }

    private string ToString(StackFrame[] stacks)
    {
        string result = string.Empty;
        foreach (StackFrame stack in stacks)
        {
            result += string.Format("{0} {1} {2} {3}\r
", stack.GetFileName(),
                stack.GetFileLineNumber(),
                stack.GetFileColumnNumber(),
                stack.GetMethod().ToString());
        }
        return result;
    }
}
위의 클래스 HasImageErrorCheckerPostExtension 은 IPostProvider Extension 에서 계승 되 고 PostProvider Extension 속성 수식 이 있 으 며 시스템 은 자동 으로 이 를 호출 하여 게시 물 을 올 릴 때 이 바 인 딩 된 이 벤트 를 촉발 합 니 다.여기 서 핵심 코드 는 new StackTrace()입 니 다.GetFrames()는 이 방법 을 통 해 현재 프로그램 이 실 행 될 때의 스 택 정 보 를 얻 을 수 있 습 니 다.Release 모드 에서 호출 할 수 있 는 방법 명 은 Debug 모드 에서 구체 적 인 파일 줄 번호,열 번 호 를 얻 을 수 있 습 니 다.이 방법 은 디 버 깅 에서 문 제 를 재현 할 수 없 을 때 문 제 를 찾 는 선택 방안 이다.

좋은 웹페이지 즐겨찾기