[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...

Timo Kreuzer timo.kreuzer at web.de
Tue Jan 8 08:11:50 UTC 2013


Am 08.01.2013 01:55, schrieb Hermès BÉLUSCA - MAÏTO:
> For the kernel bugcheck I can emit, I've found another code:
> FATAL_UNHANDLED_HARD_ERROR, what do you think about it ?
It's not exactly what is usually called a "hard error", but I'm fine 
with that, too.

> 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
What's wrong with the CRT? Everything uses the CRT.
> 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) ?
Yes assert(), that's why there should be the ASSERT macro before the 
abort(), to DBG builds will raise an assertion, which will display a 
message box and allow to break into the debugger (which is broken, but 
I'll fix it)

>
> -----Message d'origine-----
> De : ros-dev-bounces at reactos.org [mailto:ros-dev-bounces at reactos.org] 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 : ros-dev-bounces at reactos.org [mailto:ros-dev-bounces at reactos.org]
>> De la part de Timo Kreuzer Envoyé : lundi 7 janvier 2013 01:14 À :
>> ros-dev at reactos.org 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 hbelusca at svn.reactos.org:
>>> 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
>> Ros-dev at reactos.org
>> http://www.reactos.org/mailman/listinfo/ros-dev
>>
>> _______________________________________________
>> Ros-dev mailing list
>> Ros-dev at reactos.org
>> http://www.reactos.org/mailman/listinfo/ros-dev
>>
>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev at reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev
>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev at reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev
>




More information about the Ros-dev mailing list