|
P command (WinDBG), 374
/P switch (CL.EXE), 59
packing functions into binaries (working set tuning), 723–747
SWS utility, 62, 727–747
future of, 747
how to use, 728–733
implementing, 734–746
WST utility, 726
page faults, 309
minimizing, 61, 723–747
SWS utility, 727–747
future of, 747
how to use, 728–733
implementing, 734–746
PageHeap utility, 701–707
parameters
asserting, 89
macro, 410–411
viewing on stack (disassembled code), 342
WinDBG commands, 362
x86 assembly language, 322–326
PC command (WinDBG), 374
PDB (Program Database), 42, 200, 201, 494
CrashFinder utility, 502–511
generating MAP files from, 499–501
PDB2MAP utility, 499–501
/PDBSTRIPPED switch (LINK.EXE), 65
PE file format, 210
_penter function (SWS utility), 734–738
performance, 6
of BUGSLAYERUTIL.DLL, 678
critical sections, spinning, 587–588
data breakpoints, 277–280
default memory manager, 589–590
exception monitoring in native code, 296–298
exceptions, when to use, 475
logging depth and, 66
mixed-mode debugging, 247
multithreaded programming tips and tricks, 581–592
code reviews, 591
deadlock dumps in the field, 590
default memory manager, 589–590
discrete pieces, using, 583
minimizing amount of multithreading, 582
spinning critical sections, 587–588
testing on multiprocessor machines, 592
operating system heap checking, 697
relocated DLLs, 54
server application tracing, 718–722
smoke test benchmark, 69
timing code in Watch window, 283
tools, 27
working set tuning, 723–747
SWS utility, 727–747
WST utility, 726
per-thread breakpoints, 240
Peters, Rich, 502
Petzold, Charles, 766
Pietrek, Matt, 57, 210, 465, 603, 699, 767
Pike, Rob, 257, 763
pipes for remote native code debugging, 292–294
planning
automatic unit tests, 629, 634. See also unit tests
debugging/testing, 18
projects, 9–13
resources for developers, 761–769
training to avoid bugs, 13, 20
tracking changes, 33–40
bug tracking, 38–40
full memory tracking (BUGSLAYERUTIL), 678
tracking heap memory (DCRT library), 667–676
features of, 668–669
new operator, 671–674
release CRT library vs., 677–678
turning on, 670
useful functions, 675–676
tracking object lifetime, 524
version control, 33–38, 40
labeling, 37
when to make changes, 36–37
pointer verification (/RTCs switch), 708
pooled COM objects, uncommitted transactions with, 624
POP instruction (x86), 311
POPAD instruction (x86), 312
PostMessage function, 593
Poulin, Fran ois, 149
#pragma directives
comment, 63
init_seg, 693
pack, 60
warning, 49
precompiling headers, 675
preprocessing source files, 59
Presedo, Pablo, 502
.PRF files (SWS utility), 732–733
printf-style debugging (tracing), 142–148
ASP.NET applications, 146–148
DCRT library assertion support, 668
Event Tracing system, 66
EventLogTraceListener class, 97
FastTrace utility, 717–722
implementation, 721–722
merging trace logs, 720–721
flow tracing (Profiler API), 479, 484–488
native C++ applications, 148
.NET applications, 144–146
performance of, 718–719
TraceListener class, 96–103, 144
web services, 146–148
WinDBG debugger, 373–378
PrivateAssemblies directory, 436
proactive coding, 83–154
assertions, 85–142
ASP.NET applications and web services, 103–113
how to assert, 88–89
ignoring, 126–127
native C++ applications, 113–142
.NET applications, 95–103
what to assert, 86–87, 89–95
commenting, 149–150
assertions as documentation, 85
tracing, 142–148
ASP.NET applications and web services, 146–148
DCRT library assertion support, 668
Event Tracing system, 66
EventLogTraceListener class, 97
FastTrace utility, 717–722
flow tracing (Profiler API), 479, 484–488
native C++ applications, 148
.NET applications, 144–146
performance of, 718–719
TraceListener class, 96–103, 144
WinDBG debugger, 373–378
unit testing, 35, 84, 151–153, 627–665
implementing, 638–665
manual, 627–628
scripts for, 630–635
scheduling, 634
process critical section, 594
Process Explorer utility, 53, 574, 576–578
Process Status command (WinDBG), 367
processes under WinDBG, 366–371
attaching to and detaching from, 369–371
creating in Command window, 369
debugging child processes, 366–367
viewing in Command window, 367–369
ProcessFunctionComment function (XmlDocument), 419
process-related bugs, 8–17
ProcessSpy utility, 54
ProfilerLib, 465–467
profiling, 455–465
in-process debugging, 469–474
ProfilerLib, 465–467
Profiling API, 455–465
flow tracing, 479, 484–488
hooking functions in, 479–484
enter and leave notifications, 480
FunctionIDMapper function, 483–484
implementing functions, 480–482
inlining, 482–483, 484
in-process debugging, 469–474
ProgId attribute (Connect class), 427
Program Database (PDB), 200, 201, 494
CrashFinder utility, 502–511
generating MAP files from, 499–501
programming language, knowledge of, 20
projects
building debugging systems, 41–66
debug symbols, 42–46
lightweight diagnostics for release builds, 65–66
managed code warnings, 46–48
native code warnings, 48–51
builds
breaking, 67
debug builds, 67, 70
frequency of, 67–68
full debugging symbols in, 42–46
lightweight diagnostics for release builds, 65–66
organizing build settings, 444–452
reproducing, 38
symbol servers, building, 71–81
GUID strings, 412
knowledge of, 19
object models, 412–413
planning, 9–13, 18
tracking changes, 33–40
bug tracking, 38–40
full memory tracking (BUGSLAYERUTIL), 678
version control, 33–38, 40
labeling, 37
when to make changes, 36–37
prolog, function, 313
property evaluation, turning off, 230
Prosise, Jeff, 764, 766
protecting Win32 programs from debugger access, 160
pseudoregisters, 274, 283, 373
PublicAssemblies directory, 436
Purify utility, 669
PUSH instruction (x86), 311
PUSHAD instruction (x86), 312
|