debug vs release builds

hello folks,

what is the difference between debug and release mode builds. i have a
driver that works fine in debug mode but fails in relesae mode, looks like
either data alignment error or some thing related to stale variables/
pointers.

so what all are the differences b/w the two?

thanks

AP

Many things. Some of the more relevant to you might be:

  • Optimizations are typically disabled for checked builds.
  • The compiler may be configured to initialize uninitialized stack values to a known pattern (e.g. 0xcccccccc).

? S


From: A P
Sent: Wednesday, December 17, 2008 22:21
To: Windows System Software Devs Interest List
Subject: [ntdev] debug vs release builds

hello folks,

what is the difference between debug and release mode builds. i have a driver that works fine in debug mode but fails in relesae mode, looks like either data alignment error or some thing related to stale variables/ pointers.

so what all are the differences b/w the two?

thanks

AP
— NTDEV is sponsored by OSR For our schedule of WDF, WDM, debugging and other seminars visit: http://www.osr.com/seminars To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

But one thing that typically does not change is alignment, so I would think that your problem has to do with your latter guess

d

From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of Skywing
Sent: Wednesday, December 17, 2008 10:50 PM
To: Windows System Software Devs Interest List
Subject: RE: [ntdev] debug vs release builds

Many things. Some of the more relevant to you might be:

  • Optimizations are typically disabled for checked builds.
  • The compiler may be configured to initialize uninitialized stack values to a known pattern (e.g. 0xcccccccc).

? S


From: A P
Sent: Wednesday, December 17, 2008 22:21
To: Windows System Software Devs Interest List
Subject: [ntdev] debug vs release builds
hello folks,

what is the difference between debug and release mode builds. i have a driver that works fine in debug mode but fails in relesae mode, looks like either data alignment error or some thing related to stale variables/ pointers.

so what all are the differences b/w the two?

thanks

AP
— NTDEV is sponsored by OSR For our schedule of WDF, WDM, debugging and other seminars visit: http://www.osr.com/seminars To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

One thing in hardware drivers is that volatile, if not specified, may allow the optimizer to ‘fix’ your code to place something in a register that should be read from memory mapped IO. It also could cause data not marked as volatile to be placed in registers when it can be accessed by another thread running on another processor. All types of SMP issues can occur in optimized builds when they may not in non-optimized ones.

“A P” wrote in message news:xxxxx@ntdev…
hello folks,

what is the difference between debug and release mode builds. i have a driver that works fine in debug mode but fails in relesae mode, looks like either data alignment error or some thing related to stale variables/ pointers.

so what all are the differences b/w the two?

thanks

AP

> hello folks,

what is the difference between debug and release mode builds. i have a
driver that works fine in debug mode but fails in relesae mode, looks
like
either data alignment error or some thing related to stale variables/
pointers.

so what all are the differences b/w the two?

One thing that has caught me out before is that this code:

"
if (something == something_else)
KdPrint((“Something matches here\n”));
some_var = 12345;
"

compiles to this when debug is disabled:

"
if (something == something_else)
some_var = 12345;
"

because KdPrint is a no-op when debugging is off. If some_var is
otherwise un-initialised you’ll get a compiler warning, but otherwise
you’ll get nothing at all.

You can see the problems that that would cause!

James

Are you sure about this?
Shouldn’t the semicolon after KdPrint() still constitute an empty
statement?

  • Cay

On Thu, 18 Dec 2008 09:38:38 +0100, James Harper
wrote:
>> hello folks,
>>
>> what is the difference between debug and release mode builds. i have a
>> driver that works fine in debug mode but fails in relesae mode, looks
> like
>> either data alignment error or some thing related to stale variables/
>> pointers.
>>
>> so what all are the differences b/w the two?
>>
>
> One thing that has caught me out before is that this code:
>
> "
> if (something == something_else)
> KdPrint((“Something matches here\n”));
> some_var = 12345;
> "
>
> compiles to this when debug is disabled:
>
> "
> if (something == something_else)
> some_var = 12345;
> "
>
> because KdPrint is a no-op when debugging is off. If some_var is
> otherwise un-initialised you’ll get a compiler warning, but otherwise
> you’ll get nothing at all.
>
> You can see the problems that that would cause!
>
> James

>

Are you sure about this?
Shouldn’t the semicolon after KdPrint() still constitute an empty
statement?

Well… yes, I just tested and I’m clearly wrong on that one. I must
have been getting confused with another error I had. Maybe I’m thinking
of the warnings you get when the variables used in the KdPrint statement
aren’t used anywhere else…

James

Cay Bremer wrote:

Are you sure about this?
Shouldn’t the semicolon after KdPrint() still constitute an empty
statement?

A good catch.
The DDK KdPrint, KdPrintEx macros are defined just as NOTHING
in release build, thus leaving a room for this bug.

The modern MS compiler has __noop() intrinsic
so we don’t need to roll our own “do nothing”
statements like do{}while(0) etc.

So it should be now:
#define KdPrint(x) __noop()

(recently I’ve posted some examples in development.device.drivers NG)

Regards,
–PA

On Thu, 18 Dec 2008 09:38:38 +0100, James Harper
wrote:
>>> hello folks,
>>>
>>> what is the difference between debug and release mode builds. i have a
>>> driver that works fine in debug mode but fails in relesae mode, looks
>> like
>>> either data alignment error or some thing related to stale variables/
>>> pointers.
>>>
>>> so what all are the differences b/w the two?
>>>
>>
>> One thing that has caught me out before is that this code:
>>
>> "
>> if (something == something_else)
>> KdPrint((“Something matches here\n”));
>> some_var = 12345;
>> "
>>
>> compiles to this when debug is disabled:
>>
>> "
>> if (something == something_else)
>> some_var = 12345;
>> "
>>
>> because KdPrint is a no-op when debugging is off. If some_var is
>> otherwise un-initialised you’ll get a compiler warning, but otherwise
>> you’ll get nothing at all.
>>
>> You can see the problems that that would cause!
>>
>> James
>

Ah, sorry, you’re right. This would be a compile error,
not something in runtime.

–PA

Pavel A. wrote:

Cay Bremer wrote:
> Are you sure about this?
> Shouldn’t the semicolon after KdPrint() still constitute an empty
> statement?

A good catch.
The DDK KdPrint, KdPrintEx macros are defined just as NOTHING
in release build, thus leaving a room for this bug.

The modern MS compiler has __noop() intrinsic
so we don’t need to roll our own “do nothing”
statements like do{}while(0) etc.

So it should be now:
#define KdPrint(x) __noop()

(recently I’ve posted some examples in development.device.drivers NG)

Regards,
–PA

> On Thu, 18 Dec 2008 09:38:38 +0100, James Harper
> wrote:
>>>> hello folks,
>>>>
>>>> what is the difference between debug and release mode builds. i have a
>>>> driver that works fine in debug mode but fails in relesae mode, looks
>>> like
>>>> either data alignment error or some thing related to stale variables/
>>>> pointers.
>>>>
>>>> so what all are the differences b/w the two?
>>>>
>>>
>>> One thing that has caught me out before is that this code:
>>>
>>> "
>>> if (something == something_else)
>>> KdPrint((“Something matches here\n”));
>>> some_var = 12345;
>>> "
>>>
>>> compiles to this when debug is disabled:
>>>
>>> "
>>> if (something == something_else)
>>> some_var = 12345;
>>> "
>>>
>>> because KdPrint is a no-op when debugging is off. If some_var is
>>> otherwise un-initialised you’ll get a compiler warning, but otherwise
>>> you’ll get nothing at all.
>>>
>>> You can see the problems that that would cause!
>>>
>>> James
>>
>

Maybe there’s some paranoid warning level prohibiting them, but since
empty statements are valid C, there shouldn’t be a compiler error. I
completely agree about the use of the __noop intrinsic, though.

  • Cay

On Thu, 18 Dec 2008 13:05:39 +0100, Pavel A. wrote:
> Ah, sorry, you’re right. This would be a compile error,
> not something in runtime.
>
> --PA
>
>
> Pavel A. wrote:
>> Cay Bremer wrote:
>>> Are you sure about this?
>>> Shouldn’t the semicolon after KdPrint() still constitute an empty
>>> statement?
>> A good catch.
>> The DDK KdPrint, KdPrintEx macros are defined just as NOTHING
>> in release build, thus leaving a room for this bug.
>> The modern MS compiler has __noop() intrinsic
>> so we don’t need to roll our own “do nothing”
>> statements like do{}while(0) etc.
>> So it should be now:
>> #define KdPrint(x)__noop()
>> (recently I’ve posted some examples in development.device.drivers NG)
>> Regards,
>> --PA
>>
>>> On Thu, 18 Dec 2008 09:38:38 +0100, James Harper
>>> wrote:
>>>>> hello folks,
>>>>>
>>>>> what is the difference between debug and release mode builds. i have
>>>>> a
>>>>> driver that works fine in debug mode but fails in relesae mode, looks
>>>> like
>>>>> either data alignment error or some thing related to stale variables/
>>>>> pointers.
>>>>>
>>>>> so what all are the differences b/w the two?
>>>>>
>>>>
>>>> One thing that has caught me out before is that this code:
>>>>
>>>> "
>>>> if (something == something_else)
>>>> KdPrint((“Something matches here\n”));
>>>> some_var = 12345;
>>>> "
>>>>
>>>> compiles to this when debug is disabled:
>>>>
>>>> "
>>>> if (something == something_else)
>>>> some_var = 12345;
>>>> "
>>>>
>>>> because KdPrint is a no-op when debugging is off. If some_var is
>>>> otherwise un-initialised you’ll get a compiler warning, but otherwise
>>>> you’ll get nothing at all.
>>>>
>>>> You can see the problems that that would cause!
>>>>
>>>> James

I find that surprising, because what it really compiles to is

if (something == something_else)
;
some_var = 12345;

So how can this cause problems?

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of James Harper
Sent: Thursday, December 18, 2008 3:39 AM
To: Windows System Software Devs Interest List
Subject: RE: [ntdev] debug vs release builds

hello folks,

what is the difference between debug and release mode builds. i have a
driver that works fine in debug mode but fails in relesae mode, looks
like
either data alignment error or some thing related to stale variables/
pointers.

so what all are the differences b/w the two?

One thing that has caught me out before is that this code:

"
if (something == something_else)
KdPrint((“Something matches here\n”)); some_var = 12345; "

compiles to this when debug is disabled:

"
if (something == something_else)
some_var = 12345;
"

because KdPrint is a no-op when debugging is off. If some_var is otherwise
un-initialised you’ll get a compiler warning, but otherwise you’ll get
nothing at all.

You can see the problems that that would cause!

James


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at
http://www.osronline.com/page.cfm?name=ListServer


This message has been scanned for viruses and dangerous content by
MailScanner, and is believed to be clean.

There’s no such thing as “fails”. There is “fails because of a BSOD, error
code 0x??, in my driver at this line and the values it is
trying to use are …”, there is “hangs on a [ReadFile, WriteFile,
DeviceIoControl]”, there is “alwlays completes the IRP with an error”, there
is “fails to let the application close; hangs on the CloseHandle call”, and
so on, but I have no idea what “fails” means without an explanation.

What architecture are you using? Only the IA64 can have data alignment
issues. Are you using that? If you are, say so. If not, say so.

Did you turn on optimizations in your build? Or is your release build
unoptimized? If it was optimized, did you try it unoptimized?

What did !analyze -v tell you?

Otherwise, the answer is simple: you did something wrong. Fix it. That’s
the only possible response to a vague description like “fails”.

(At least one situation I knew of, the DbgPrint statements changed the
timing so that a fundamental race condition went unnoticed in the debug
build, but became quite evident in the release build. So, for example, try
the debug build with all KdPrint statements disabled…)
joe

_____

From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of A P
Sent: Thursday, December 18, 2008 1:22 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] debug vs release builds

hello folks,

what is the difference between debug and release mode builds. i have a
driver that works fine in debug mode but fails in relesae mode, looks like
either data alignment error or some thing related to stale variables/
pointers.

so what all are the differences b/w the two?

thanks

AP
— NTDEV is sponsored by OSR For our schedule of WDF, WDM, debugging and
other seminars visit: http://www.osr.com/seminars To unsubscribe, visit the
List Server section of OSR Online at
http://www.osronline.com/page.cfm?name=ListServer

This message has been scanned for viruses and
dangerous content by http:</http:> MailScanner, and is
believed to be clean.

Why would I want to drop __noop instructions into my driver? This sounds
like a negative-value solution to a non-problem.
joe

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Pavel A.
Sent: Thursday, December 18, 2008 6:45 AM
To: Windows System Software Devs Interest List
Subject: Re:[ntdev] debug vs release builds

Cay Bremer wrote:

Are you sure about this?
Shouldn’t the semicolon after KdPrint() still constitute an empty
statement?

A good catch.
The DDK KdPrint, KdPrintEx macros are defined just as NOTHING in release
build, thus leaving a room for this bug.

The modern MS compiler has __noop() intrinsic so we don’t need to roll our
own “do nothing”
statements like do{}while(0) etc.

So it should be now:
#define KdPrint(x) __noop()

(recently I’ve posted some examples in development.device.drivers NG)

Regards,
–PA

On Thu, 18 Dec 2008 09:38:38 +0100, James Harper
wrote:
>>> hello folks,
>>>
>>> what is the difference between debug and release mode builds. i have
>>> a driver that works fine in debug mode but fails in relesae mode,
>>> looks
>> like
>>> either data alignment error or some thing related to stale
>>> variables/ pointers.
>>>
>>> so what all are the differences b/w the two?
>>>
>>
>> One thing that has caught me out before is that this code:
>>
>> "
>> if (something == something_else)
>> KdPrint((“Something matches here\n”)); some_var = 12345; "
>>
>> compiles to this when debug is disabled:
>>
>> "
>> if (something == something_else)
>> some_var = 12345;
>> "
>>
>> because KdPrint is a no-op when debugging is off. If some_var is
>> otherwise un-initialised you’ll get a compiler warning, but otherwise
>> you’ll get nothing at all.
>>
>> You can see the problems that that would cause!
>>
>> James
>


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at
http://www.osronline.com/page.cfm?name=ListServer


This message has been scanned for viruses and dangerous content by
MailScanner, and is believed to be clean.

Pavel A. wrote:

The modern MS compiler has __noop() intrinsic so we don’t need
to roll our own “do nothing” statements like do{}while(0) etc.

I thought do {} while (0); was to allow you to break out of a block of statements without using goto.

>

Are you sure about this?
Shouldn’t the semicolon after KdPrint() still constitute an empty
statement?

Well… yes, I just tested and I’m clearly wrong on that one. I must
have been getting confused with another error I had. Maybe I’m thinking
of the warnings you get when the variables used in the KdPrint statement
aren’t used anywhere else…

James


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

> -----Original Message-----

From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of
xxxxx@gmail.com
Sent: Thursday, December 18, 2008 3:15 PM
To: Windows System Software Devs Interest List
Subject: RE:[ntdev] debug vs release builds

Pavel A. wrote:

> The modern MS compiler has __noop() intrinsic so we don’t need
> to roll our own “do nothing” statements like do{}while(0) etc.

I thought do {} while (0); was to allow you to break out of a
block of statements without using goto.

Not only. It can be also used to convert complext statement to an
expression.

Best regards,

Michal Vodicka
UPEK, Inc.
[xxxxx@upek.com, http://www.upek.com]

It can be dangerous if the KdPrint statement itself has side effects. e.g.:

KdPrint((“foo: %x\n”, foo_func()));

? S

-----Original Message-----
From: James Harper
Sent: Thursday, December 18, 2008 03:03
To: Windows System Software Devs Interest List
Subject: RE: [ntdev] debug vs release builds

>
> Are you sure about this?
> Shouldn’t the semicolon after KdPrint() still constitute an empty
> statement?
>

Well… yes, I just tested and I’m clearly wrong on that one. I must
have been getting confused with another error I had. Maybe I’m thinking
of the warnings you get when the variables used in the KdPrint statement
aren’t used anywhere else…

James


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

Most compilers will issue a warning if they encounter an empty conditional statement, however.

? S

-----Original Message-----
From: Cay Bremer
Sent: Thursday, December 18, 2008 04:33
To: Windows System Software Devs Interest List
Subject: Re:[ntdev] debug vs release builds

Maybe there’s some paranoid warning level prohibiting them, but since
empty statements are valid C, there shouldn’t be a compiler error. I
completely agree about the use of the __noop intrinsic, though.

- Cay

On Thu, 18 Dec 2008 13:05:39 +0100, Pavel A. wrote:
> Ah, sorry, you’re right. This would be a compile error,
> not something in runtime.
>
> --PA
>
>
> Pavel A. wrote:
>> Cay Bremer wrote:
>>> Are you sure about this?
>>> Shouldn’t the semicolon after KdPrint() still constitute an empty
>>> statement?
>> A good catch.
>> The DDK KdPrint, KdPrintEx macros are defined just as NOTHING
>> in release build, thus leaving a room for this bug.
>> The modern MS compiler has__noop() intrinsic
>> so we don’t need to roll our own “do nothing”
>> statements like do{}while(0) etc.
>> So it should be now:
>> #define KdPrint(x) __noop()
>> (recently I’ve posted some examples in development.device.drivers NG)
>> Regards,
>> --PA
>>
>>> On Thu, 18 Dec 2008 09:38:38 +0100, James Harper
>>> wrote:
>>>>> hello folks,
>>>>>
>>>>> what is the difference between debug and release mode builds. i have
>>>>> a
>>>>> driver that works fine in debug mode but fails in relesae mode, looks
>>>> like
>>>>> either data alignment error or some thing related to stale variables/
>>>>> pointers.
>>>>>
>>>>> so what all are the differences b/w the two?
>>>>>
>>>>
>>>> One thing that has caught me out before is that this code:
>>>>
>>>> "
>>>> if (something == something_else)
>>>> KdPrint((“Something matches here\n”));
>>>> some_var = 12345;
>>>> "
>>>>
>>>> compiles to this when debug is disabled:
>>>>
>>>> "
>>>> if (something == something_else)
>>>> some_var = 12345;
>>>> "
>>>>
>>>> because KdPrint is a no-op when debugging is off. If some_var is
>>>> otherwise un-initialised you’ll get a compiler warning, but otherwise
>>>> you’ll get nothing at all.
>>>>
>>>> You can see the problems that that would cause!
>>>>
>>>> James


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

This is incorrect. Anything gated through ProbeForXxx must match the given alignment on any architecture, i.e. System call parameters.

It is possible to make alignment faults visible to user mode on x86 as well on Windows, but this is straying a bit.

Other cases where alignment can be meaningful on x86/x64 include memory mapped I/O and atomics. Of course, misaligned accesses cause a loss of performance as well.

Now, these may not be the OP’s problem, but the blanket statement that x86 doesn’t care about alignment is false.

? S


From: Joseph M. Newcomer
Sent: Thursday, December 18, 2008 05:56
To: Windows System Software Devs Interest List
Subject: RE: [ntdev] debug vs release builds

There’s no such thing as “fails”. There is “fails because of a BSOD, error code 0x??, in my driver at this line and the values it is trying to use are …”, there is “hangs on a [ReadFile, WriteFile, DeviceIoControl]”, there is “alwlays completes the IRP with an error”, there is “fails to let the application close; hangs on the CloseHandle call”, and so on, but I have no idea what “fails” means without an explanation.

What architecture are you using? Only the IA64 can have data alignment issues. Are you using that? If you are, say so. If not, say so.

Did you turn on optimizations in your build? Or is your release build unoptimized? If it was optimized, did you try it unoptimized?

What did !analyze -v tell you?

Otherwise, the answer is simple: you did something wrong. Fix it. That’s the only possible response to a vague description like “fails”.

(At least one situation I knew of, the DbgPrint statements changed the timing so that a fundamental race condition went unnoticed in the debug build, but became quite evident in the release build. So, for example, try the debug build with all KdPrint statements disabled…)
joe

________________________________
From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of A P
Sent: Thursday, December 18, 2008 1:22 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] debug vs release builds

hello folks,

what is the difference between debug and release mode builds. i have a driver that works fine in debug mode but fails in relesae mode, looks like either data alignment error or some thing related to stale variables/ pointers.

so what all are the differences b/w the two?

thanks

AP
— NTDEV is sponsored by OSR For our schedule of WDF, WDM, debugging and other seminars visit: http://www.osr.com/seminars To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

This message has been scanned for viruses and
dangerous content by MailScannerhttp:</http:>, and is
believed to be clean.

NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

__noop does not emit any machine code at all. It does not emit a NOP.

? S

-----Original Message-----
From: Joseph M. Newcomer
Sent: Thursday, December 18, 2008 06:08
To: Windows System Software Devs Interest List
Subject: RE: [ntdev] debug vs release builds

Why would I want to drop __noop instructions into my driver? This sounds
like a negative-value solution to a non-problem.
joe

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Pavel A.
Sent: Thursday, December 18, 2008 6:45 AM
To: Windows System Software Devs Interest List
Subject: Re:[ntdev] debug vs release builds

Cay Bremer wrote:
> Are you sure about this?
> Shouldn’t the semicolon after KdPrint() still constitute an empty
> statement?

A good catch.
The DDK KdPrint, KdPrintEx macros are defined just as NOTHING in release
build, thus leaving a room for this bug.

The modern MS compiler has__noop() intrinsic so we don’t need to roll our
own “do nothing”
statements like do{}while(0) etc.

So it should be now:
#define KdPrint(x) __noop()

(recently I’ve posted some examples in development.device.drivers NG)

Regards,
–PA

> On Thu, 18 Dec 2008 09:38:38 +0100, James Harper
> wrote:
>>> hello folks,
>>>
>>> what is the difference between debug and release mode builds. i have
>>> a driver that works fine in debug mode but fails in relesae mode,
>>> looks
>> like
>>> either data alignment error or some thing related to stale
>>> variables/ pointers.
>>>
>>> so what all are the differences b/w the two?
>>>
>>
>> One thing that has caught me out before is that this code:
>>
>> "
>> if (something == something_else)
>> KdPrint((“Something matches here\n”)); some_var = 12345; "
>>
>> compiles to this when debug is disabled:
>>
>> "
>> if (something == something_else)
>> some_var = 12345;
>> "
>>
>> because KdPrint is a no-op when debugging is off. If some_var is
>> otherwise un-initialised you’ll get a compiler warning, but otherwise
>> you’ll get nothing at all.
>>
>> You can see the problems that that would cause!
>>
>> James
>


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at
http://www.osronline.com/page.cfm?name=ListServer


This message has been scanned for viruses and dangerous content by
MailScanner, and is believed to be clean.


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer