For the kernel bugcheck I can emit, I've found another code:
FATAL_UNHANDLED_HARD_ERROR, what do you think about it ?
And for usermode, does it exist something else than abort() which doesn't
use the CRT, but which produces the same effects ? The exception will end up
in the exception handler usually, you say, but does it exist something else
that I can use (which can show up a msgbox to connect the debugger as
breakpoint or exception does BUT which stops the program exactly at the
point of the call) ?

-----Message d'origine-----
De : [email protected] [mailto:[email protected]] De la
part de Timo Kreuzer
Envoyé : lundi 7 janvier 2013 13:52
À : ReactOS Development List
Objet : Re: [ros-dev] [ros-diffs] [hbelusca] 58135: [REACTOS] - Fix the
debugging macros I've introduced in r58132; in particular do not use
while(true); for forbidding the user to continue execution, but instead
raise an exception...


We can use KeBugCheck / abort:

// for debug and release

#if kernelmode
#define FATAL()  KeBugCheck(CRITICAL_SERVICE_FAILED) // <= didn't find a
better bugcheck code #else #define FATAL() abort(); #endif

or implement some Rtl function for that

#define UNIMPLEMENTED_FATAL() \
     UNIMPLEMENTED;
     ASSERT(FALSE);
     FATAL()

Am 07.01.2013 01:55, schrieb Hermès BÉLUSCA - MAÏTO:
> Have you another solution in mind, to stop execution at this place BUT 
> without being able to do 'cont' to continue the execution, when using 
> the *_FATAL macros ? (the *_DBGBREAK macros should be fine, see my 
> very last commit).
>
> Hermès
>
> -----Message d'origine-----
> De : [email protected] [mailto:[email protected]] 
> De la part de Timo Kreuzer Envoyé : lundi 7 janvier 2013 01:14 À : 
> [email protected] Objet : Re: [ros-dev] [ros-diffs] [hbelusca] 
> 58135: [REACTOS] - Fix the debugging macros I've introduced in r58132; 
> in particular do not use while(true); for forbidding the user to 
> continue execution, but instead raise an exception...
>
>
> I see a problem with this change.
> A debug breakpoint will always break into the debugger exactly where it
is.
> Like an ASSERT does.
> But an exception will usually end up in the installed exception handler.
> This does not really help with figuring out what went wrong.
>
> Am 07.01.2013 00:29, schrieb [email protected]:
>> Author: hbelusca
>> Date: Sun Jan  6 23:29:05 2013
>> New Revision: 58135
>>
>> URL: http://svn.reactos.org/svn/reactos?rev=58135&view=rev
>> Log:
>> [REACTOS]
>> - Fix the debugging macros I've introduced in r58132; in particular 
>> do not
> use while(true); for forbidding the user to continue execution, but 
> instead raise an exception with EXCEPTION_NONCONTINUABLE flag 
> (included when called RtlRaiseStatus).
>> - Adjust the definition of RtlRaiseStatus (in kernel-mode it is
> ExRaiseStatus which is used).
>> Modified:
>>       trunk/reactos/include/reactos/debug.h
>>
>> Modified: trunk/reactos/include/reactos/debug.h
>> URL:
>> http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/debu
>> g .h?rev=58135&r1=58134&r2=58135&view=diff
>> =====================================================================
>> =
>> ========
>> --- trunk/reactos/include/reactos/debug.h [iso-8859-1] (original)
>> +++ trunk/reactos/include/reactos/debug.h [iso-8859-1] Sun Jan  6
>> +++ 23:29:05 2013
>> @@ -15,7 +15,7 @@
>>    #ifndef __INTERNAL_DEBUG
>>    #define __INTERNAL_DEBUG
>>    
>> -/* Define DbgPrint/DbgPrintEx/RtlAssert unless the NDK is used */
>> +/* Define DbgPrint/DbgPrintEx/RtlAssert/RtlRaiseStatus unless the 
>> +NDK is used */
>>    #if !defined(_RTLFUNCS_H) && !defined(_NTDDK_)
>>    
>>    /* Make sure we have basic types (some people include us *before* 
>> SDK)... */ @@ -51,7 +51,27 @@
>>        PCHAR Message
>>    );
>>    
>> +#ifndef _NTDEF_ /* Guard against redefinition from ntdef.h */
>> +    typedef _Return_type_success_(return >= 0) LONG NTSTATUS; #endif 
>> +__analysis_noreturn NTSYSAPI VOID NTAPI RtlRaiseStatus(
>> +    _In_ NTSTATUS Status
>> +);
>> +
>>    #endif /* !defined(_RTLFUNCS_H) && !defined(_NTDDK_) */
>> +
>> +
>> +/* Fix usage of RtlRaiseStatus */
>> +#if !defined(_RTLFUNCS_H) && defined(_NTDDK_)
>> +    #define RaiseStatus ExRaiseStatus #else
>> +    #define RaiseStatus RtlRaiseStatus #endif /*
>> +!defined(_RTLFUNCS_H) && defined(_NTDDK_) */
>> +
>>    
>>    #ifndef assert
>>    #ifndef NASSERT
>> @@ -136,11 +156,7 @@
>>    
>>    #endif /* not DBG */
>>    
>> -/*
>> - * These macros are designed to display an optional printf-like
>> - * user-defined message and to break into the debugger.
>> - * After that they allow to continue the program execution.
>> - */
>> +/*******************************************************************
>> +*
>> +**********/
>>    /* For internal purposes only */
>>    #define __ERROR_DBGBREAK(...)   \
>>    do {                            \
>> @@ -148,6 +164,18 @@
>>        DbgBreakPoint();            \
>>    } while (0)
>>    
>> +/* For internal purposes only */
>> +#define __ERROR_FATAL(Status, ...)  \
>> +do {                                \
>> +    DbgPrint("" __VA_ARGS__);       \
>> +    RaiseStatus((Status));          \
>> +} while (0)
>> +
>> +/*
>> + * These macros are designed to display an optional printf-like
>> + * user-defined message and to break into the debugger.
>> + * After that they allow to continue the program execution.
>> + */
>>    #define ERROR_DBGBREAK(...)         \
>>    do {                                \
>>        __NOTICE(ERROR, "\n");          \
>> @@ -165,19 +193,18 @@
>>     * user-defined message and to break into the debugger.
>>     * After that they halt the execution of the current thread.
>>     */
>> -#define ERROR_FATAL(...)                    \
>> -do {                                        \
>> -    __NOTICE(UNRECOVERABLE ERROR, "\n");    \
>> -    __ERROR_DBGBREAK(__VA_ARGS__);          \
>> -    while (TRUE);                           \
>> +#define ERROR_FATAL(...)                                    \
>> +do {                                                        \
>> +    __NOTICE(UNRECOVERABLE ERROR, "\n");                    \
>> +    __ERROR_FATAL(STATUS_ASSERTION_FAILURE, __VA_ARGS__);   \
>>    } while (0)
>>    
>>    #define UNIMPLEMENTED_FATAL(...)                            \
>>    do {                                                        \
>>        __NOTICE(UNRECOVERABLE ERROR, "is UNIMPLEMENTED!\n");   \
>> -    __ERROR_DBGBREAK(__VA_ARGS__);                          \
>> -    while (TRUE);                                           \
>> -} while (0)
>> +    __ERROR_FATAL(STATUS_NOT_IMPLEMENTED, __VA_ARGS__);     \
>> +} while (0)
>> +/*******************************************************************
>> +*
>> +**********/
>>    
>>    #define ASSERT_IRQL_LESS_OR_EQUAL(x) ASSERT(KeGetCurrentIrql()<=(x))
>>    #define ASSERT_IRQL_EQUAL(x) ASSERT(KeGetCurrentIrql()==(x))
>>
>>
>>
>
> _______________________________________________
> Ros-dev mailing list
> [email protected]
> http://www.reactos.org/mailman/listinfo/ros-dev
>
> _______________________________________________
> Ros-dev mailing list
> [email protected]
> http://www.reactos.org/mailman/listinfo/ros-dev
>


_______________________________________________
Ros-dev mailing list
[email protected]
http://www.reactos.org/mailman/listinfo/ros-dev

_______________________________________________
Ros-dev mailing list
[email protected]
http://www.reactos.org/mailman/listinfo/ros-dev

Reply via email to