NAME
docs/dev/debugging_with_msvc.pod - Debugging Parrot with Microsoft Visual C++
DESCRIPTION
This document describes how to get started with debugging on Microsoft Windows using Visual C++ 7 and later.
Compiler Options
Probably the easiest way to get going with debugging is to add some compiler options.
One way to go about this is to run perl Configure.pl
,
look at the CFLAGS
in Makefile and then run perl Configure.pl --ccflags="..."
with the new flags.
Once done,
consider saving your Configure call in a batch file so you have it available the next time.
/Wall
Listen to your compiler.
/RTCcsu
- Enables run-time error checking
This enables three different runtime checks: Conversion to smaller type, stacke frame and use of uninitialized local variable. See http://msdn2.microsoft.com/en-us/library/8wtf2dfz(VS.80).aspx.
/GS
- Buffers security check
Detect some buffer overruns. See http://msdn2.microsoft.com/en-us/library/8dbf701c(VS.80).aspx.
/Wp64
- Detect 64-bit compatibility problems
Don't use this one. Leave 64-bit checking to the real 64-bit compilers.
/D_DEBUG
vs.
/DNDEBUG
_DEBUG
enables the use of the debugging versions of the runtime functions.
NDEBUG
disables the debug function assert
.
Beware that the Visual C++ specific assertion macro _ASSERT
is only enabled if _DEBUG
is defined!
It's probably best to start with making sure that NDEBUG
is not defined and enable the debugging C runtime later.
Debugging C runtime
Two steps are necessary to use the debugging C runtime.
First change the -MD
flag to -MDd
.
This will implicitly define _DEBUG
.
Often this is enough,
but Parrot lists the libraries explicitly,
so you'd need to replace MSVCRT.lib with MSVCRTd.lib.
For this,
run perl Configure.pl
,
look at C_LIBS
in the Makefile and run perl Configure.pl --libs="..."
with the new libs.
/analyze
Microsoft added more static source code analysis to the their compiler, but this is only available with certain editions. If not supported you'll see the following warning.
cl : Command line warning D9040 : ignoring option '/analyze'; Code Analysis warnings are not available in this edition of the compiler
Examples
Here's an example how the new Configure call might look like.
perl Configure.pl ^ --ccflags="-nologo -Wall -MDd -Zi -Od -GS -RTCcsu -DWIN32 -D_CONSOLE" ^ --linkflags="-nologo -nodefaultlib -machine:x86 -debug -incremental:no" ^ --ldflags="-nologo -nodefaultlib -machine:x86 -debug -incremental:no" ^ --libs="kernel32.lib ws2_32.lib msvcrtd.lib oldnames.lib" ^ %*
Debugging Tools for Windows
TODO
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
Examples
TODO
Microsoft Application Verifier
TODO
http://www.microsoft.com/technet/prodtechnol/windows/appcompatibility/appverifier.mspx
Examples
TODO
Frequently Asked Questions
TODO
SEE ALSO
AUTHOR
Ronald Blaschke <ron@rblasch.org>