2

편집을 죽이고 : 나는이 문제를 확인했다.디버거의 (a CryptoStream.ReadByte() 호출에) 아무 설명과 함께 응용 프로그램

내 목적은 우리가 암호화하거나 파일을 해독하고 있었다 여부, 쓰기 모드에서 파일 스트림을 초기화 된 생성자. 쓰기 파일 스트림이 해독되기 전에 닫히지 만 (그 목적으로 사용되는 다른 파일 스트림) 여전히 조용한 충돌을 일으켰습니다. 이제 제대로 작동합니다.

그래서 보통 파일 액세스 문제처럼 보입니다. CryptoStream이 예외로 처리하지 않는 불만입니다. 제안에 대한

감사합니다 - 나는 ProcDumpWinDbg는 살펴해야합니다.


난 그냥 로컬 하드 디스크에서 파일을 읽고 해독 할 수있는 작은 응용 프로그램을 만들었습니다.

Visual Studio 디버거는 메시지 나 설명없이 응용 프로그램을 종료합니다. 다음 코드에서 행 read = crypto.ReadByte()이 실행될 때 발생합니다.

  1. 어떤 예외가 발생하지 않습니다 : 나는 시도하고 배제 무엇

      try 
          { 
           if (file != null) 
           { 
            // the stream that was used for encryption 
            file.Close(); 
           } 
           var provider = new DESCryptoServiceProvider(); 
           provider.Key = Key; 
           provider.IV = Key; 
           var ict = provider.CreateDecryptor(); 
           var bytes = new List<byte>(); 
           using (var stream = new FileStream(fileName, FileMode.Open)) 
           { 
            crypto = new CryptoStream(stream, ict, CryptoStreamMode.Read); 
            var decrypted = new MemoryStream(); 
            Int32 read; 
            try 
            { 
             do 
             { 
              read = crypto.ReadByte(); // the application dies here 
              if (read != -1) bytes.Add(Convert.ToByte(read)); 
             } 
             while (read != -1); 
            } 
            finally 
            { 
             // we never get here 
             decrypted.Close(); 
            } 
    
           }; 
           return ASCIIEncoding.ASCII.GetString(bytes.ToArray()); 
          } 
          catch (Exception x) 
          { 
           // we never get here either        
           crypto.Close(); 
           return x.Message; 
          } 
    

    . finally 또는 catch을 입력하지 마십시오. 나는 또한 Break when an exception is thrown을 활성화했지만 아무런 차이가 없습니다. 예외 표시가 없습니다.

  2. 애플리케이션 (ClickOnce를)를 게시 및 실행 동일한 효과를 갖는다.

  3. 다시 시작하면 아무런 차이가 없습니다.

  4. (다른 프로세스가 액세스 등을 차단하는 경우 경우) 파일의 복사본을 제작하고 그 사본을 읽으려고이 같은 방식으로 실패합니다. 내가 조사 식 창에 crypto.ReadByte()을 평가하려고하면

  5. , 그 순서에 따라 다음 메시지를 받고 있어요 :

    • This expression causes side effects and will not be evaluated;

    • 나는 그것을 새로 고칠 때 : 나도 그것을 새로 고치거나 몇 초 기다려야 할 때 Function evaluation was aborted

    • : Unable to evaluate the expression. The object invoked has disconnected from its clients.

앱이 종료됩니다, 우리가에있어 비주얼 스튜디오.

무엇이 문제입니까?

+0

방법 ->은 System.StackOverflowException은 "슬로우"체크 'Key'가 초기화 되었습니까? 어떤면에서는 잘못된 것 같습니다. –

+0

@Jeremy'Key'는 하드 코드되어 있습니다. 이것은 Pi의 8 자리 첫 자릿수의 바이트 배열입니다. –

+0

이 키를 사용하여 인코딩/디코딩이 제대로 작동합니까? 애드혹 (ad-hoc) 단위 테스트를 해보십시오. 적어도 원인을 제거 할 것입니다. –

답변

4

몇 가지 제안 :

  • 귀하의 응용 프로그램에 -t 옵션으로 ProcDump를 사용해보십시오. 앱이 조기에 종료 될 때 덤프 파일을 생성해야합니다. 유용한 덤프가 생성되지 않으면 다른 옵션도 시도하십시오 (예 : -e).
  • 그래도 작동하지 않으면 WinDbg에서 응용 프로그램을 실행 해보십시오.
0

나는 대답이 너무 늦었다는 것을 알고 있지만 어쩌면 도움이 될 수도 있습니다. 나는 당신의 시계 창에 오류 메시지가 포함 된 경우 같은 문제이 대답은 나에게 Debugger kills the application with no explanation (on a CryptoStream.ReadByte() call)

도움이 "기능 평가가 중단되었다." 이 슬로우되면

readonly bool isSigned; 
public bool IsSigned { get { return isSigned; } } 

당신은있는 StackOverflowException을 잡을 수 :

readonly bool isSigned; 
public bool IsSigned { get { return IsSigned; } } 

는 무한 재귀를 수정하고 문제가 해결 가야한다 : 그것은 아마 표시 속성 중 하나가 지금과 같은 무한 재귀을 가지고 의미 "디버그"메뉴 표시 줄에서 선택하여 Visual Studio를 사용하여 -> "예외"-> "찾기 ..."-> 유형 "에 유래"-> "OK"