2011-03-21 2 views
6

나는 불완전한 프로젝트를 인수 나의 완전한 믿지, 모든 단일 기능이 동일한 형식으로 시도-catch 문으로 싸여있다 : 나는 빨리 모든를 제거하는 방법에 대한 SO 검색으로try-catch 블록을 제거하는 MSVS C# 빠른 방법?

try 
{ 
    // work work. 
} 
catch(Exception ex) 
{ 
    MessageBox.Show(ex.Message, ...); 
} 

try- catch 블록을 사용하면 실제로 사람들이 try-catch 함수를 자동으로 래핑하는 메서드를 찾고 있습니다. 흠 ... 좋은 프로그래밍 실습인가? 모든 블록을 대신 제거하여 디버깅을 쉽게하고 예외를 실제로 해결할 수있는 방법이 있습니까?

+0

나는이 일을 한 번 해봐야했다. 나의 해결책은 복사/붙여 넣기의 8 시간 스트리트 였지만, 모든 것을 끝내고 {전체를 다시 테스트} 900 시간을 더했다. 즐거운 시간. – asawyer

답변

7

현재 위치 옵션을 변경할 수 있습니다

Debug -> Exceptions -> CLR Exceptions -> Check the "Thrown" checkbox. 

이것은 예외가 어떤 catch 블록을 확인하기 전에, 발생 될 때마다 깰 컴파일러가.

+0

+1 - 이것은 디버거에서 예외를 잡아내는 것이 아니라 프로그램에 의해 억압된다는 것을 의미합니다. 예외 처리를 "영구적으로"해제하지는 않습니다. –

+0

이것은 실제로 도움이됩니다. 감사! 하지만 제이슨이 말했듯이 무능하게하고 싶습니다. – Jake

2

이것은 끔찍한 프로그래밍 습관입니다. 나는 누군가의 데이터베이스를 망쳐 놓은 버그를 한 번 보았습니다.

알려지지 않은 상태에서 프로그램을 계속 불타는 것보다 더 불타는 죽음을 피하는 것이 좋습니다.

MessageBox.Show(ex을 찾아서 대체하려면 throw //MessageBox.Show(ex으로 바꾸고 모두 바꿉니다. 실제로 있어야 할 것들을 수동으로 찾아 다시 돌려 놓아야합니다.

2

Visual Studio의 Regex 검색은 매우 강력하지만 사용하기가 약간 까다 롭습니다. 위의 코드를 검색 할 때 유용 할 수 있습니다. (찾기 대화 상자의 옵션 섹션에서 " 사용 : 정규 표현식 ")

이 나쁜 어획량을 찾을 것입니다.

캐치 * \ n + : B + {[: B \ 없음] 메시지 박스. : *}

당신이 작업을 수행하려면 똑바로 던져 교체 [ㄱ합니다. \ n] :

캐치 \ n을 {\ nthrow; \ n}

0

VB.NET에서이 문제에 대한 해결책을 발견했습니다.

이 교체 :

\s(?<!End)Try((.|\r\n)+?)Catch(.|\r\n)+?(Finally((.|\r\n)+?)End Try|End Try)

을 ...이와 함께 : 뒤에 둔 상태

$1$5

그것은 전체 try/catch 블록을 제거 할 시도에 있던 것만 및 마침내 차단. 하지만 중첩 된 try/catch에서는 작동하지 않으므로 중첩 된 블록을 먼저 교체 한 다음 외부 블록을 마지막으로 교체해야합니다.

+0

예외가 합법적으로 처리되는 곳에서 try-catch를 제거하는 것은 좋은 생각이 아닙니다. – Aaroninus

관련 문제