2012-04-10 6 views
0

는 사람은 다음과 "디버거 오류 알림" C++ 빌더 XE에서 의미하는 무엇을 나에게 설명해 주시겠습니까 : 나는 예외를 던질 필요가있을 때응용 프로그램 정의 예외

"Project ... faulted with message: 'application-defined exception (code 0x0eefface) at 0x755ad36f. Process Stopped. Use Step or Run to continue." 

그것은에만 발생합니다 - 던져의 호출을 이 오류가 발생합니다. 이 문제에 대한 정보를 찾을 수 없습니다. 예외의

던지기 :

#define MY_ERROR_CODE 0xE0000046 

throw TMyTrouble(MY_ERROR_CODE, "My error message"); // calling of this raises the application-defined exception... 

잡기 : 예외의

try{ 
Function(); // function that raises the exception TMyTrouble 
} 
catch(...){ // this catch should catch the exception but it doesn't 
// do something 
throw; // throw to upper layer 
} 

정의 :

class TMyTrouble{ 
     public: 
     TMyTrouble(int errorCode = 0xFFFFFFFF, AnsiString errorMessage = "Unknown error") { FMessage = errorMessage; FCode = errorCode;} 
     __property AnsiString Message = {read = FMessage}; 
     __property unsigned long Code = {read = FCode}; 

     private: 
     unsigned long FCode; 
     AnsiString FMessage; 
    }; 
+0

던져진 예외를 처리하는 어딘가에 'catch'가 있습니까? – hmjd

+0

네,하지만 아무것도 잡아 내지 않습니다 - 이상한 점은 – Martinique

+1

'throw '와'catch' 코드와 예외 정의를 게시 할 수 있습니까? – hmjd

답변

0

난 그냥 "말의 바로 디버거의 방법이 아니다 예외가 던져 졌음을 알았습니다. 무엇을하고 싶습니까? "

예외를 throw 할 때 디버거를 중지하지 않으려면 해당 설정이 있습니다.

contine을 선택하면 코드가이를 catch해야합니다.

+0

그렇게 생각하지 않습니다 ...디버거는 앞에서 말한 것처럼 예외를 throw하는 것에 대해 알려주지 만 던지기 프로 시저의 내부 오류처럼 보입니다. 왜냐하면 던지기가 실행되지 않기 때문입니다. throw 프로 시저가 일부 내부 예외를 throw하는 것처럼 보입니다. 그러나 catch 문에 의해 catch되어야하기 때문에 이상합니다. 그러나 ... : ( – Martinique

+0

아니요, 이것은 확실히 첫 번째 기회를보고하는 디버거입니다 예외가 표시되기 전에 "프로세스가 중지되었습니다. 계속하려면 단계 또는 실행을 사용하십시오"메시지의 내용을 읽으십시오 F9 키를 눌러 실행을 계속하고 예외 –

1

당신이보고있는 것은 완벽하게 정상적인 동작입니다. 당신이보고있는 것을 "첫 기회 예외"메시지라고합니다. 앱이 예외를보기 전에 디버거가 메시지를보고합니다. 이것은 메시지의 텍스트에서 분명합니다 : "프로세스가 중지되었습니다. 계속하려면 단계 또는 실행을 사용하십시오". 단지 메시지가 말하는대로하십시오 - 단순히 F9 키를 누르거나 툴바의 Run 버튼을 눌러 실행을 계속하면 예외가 정상적인 처리를 위해 try/catch 블록에서 다시 앱으로 전달됩니다.

byte value; 
sscanf(buffer, "%02x", &value); 

이 문제를 볼 수 : 나는 여러분 모두에게 사과

+0

그래서 catch 문에 의해 일반적으로 catch되지 않는 이유 릴리스 모드에서 예외를 throw하면 응용 프로그램이 중단되고 catch 문이없는 예외가 발생하기 때문에 정상이 아닙니다. 오류 대화 상자,하지만 응용 프로그램 아래로 떨어지지 ... – Martinique

+0

만약 당신이 말한 것처럼 "첫 번째 예외 예외"메시지가 표시된 후 F8 키를 누르면 (스텝 앞으로) 내 예외가 실행되지 않고 p 프로그램은 throw 문 다음에 계속된다. – Martinique

+0

'catch (...)'는 항상 모든 것을 잡아 내지는 않는다. 예를 들어 BCB6 이후에는 VCL Exception 객체를 올바르게 포착하지 못합니다. 대신에'TMyTrouble'을 명시 적으로 잡으십시오 :'catch (const TMyTrouble & e)' –

0

이 문제는 throw 문 전에 건설했다? 함수는 해당 형식 문자열 "%02x"에 대해 긴 값 (4 바이트)을 반환하지만 바이트 변수는 value (1 바이트)이므로 3 바이트가 어딘가에 쓰여지고 스택이 손상되었거나 (문제가되는 경우) 어떤 문제가 발생합니까? ...

도와 주셔서 감사합니다.

관련 문제