Discussion:
Several Application Verifier Bugs and a Feature Request
(too old to reply)
i***@gmail.com
2008-06-23 18:47:31 UTC
Permalink
I'm using Application Verifier 3.4.0158. Using the GUI, I select File-
Add Application and type the name of my .exe into the dialog box. In
the Tests window, I expand Basics and Click on Heaps. In the
properties window, I click on Dlls and type the name of a dll. I save
the settings to the registry. When I run the program under windbg and
type heap -p, I get the following output:

0:000> !heap -p

Active GlobalFlag bits:
vrf - Enable application verifier
hpa - Place heap allocations at ends of pages

StackTraceDataBase @ 00150000 of size 01000000 with 00000000
traces

PageHeap enabled with options:
ENABLE_PAGE_HEAP
COLLECT_STACK_TRACES
USE_DLL_NAMES


active heaps:

+ 1150000
ENABLE_PAGE_HEAP COLLECT_STACK_TRACES USE_DLL_NAMES
NormalHeap - 1250000
HEAP_GROWABLE
+ 1360000
ENABLE_PAGE_HEAP COLLECT_STACK_TRACES USE_DLL_NAMES
NormalHeap - 1460000
HEAP_GROWABLE HEAP_CLASS_1
+ 14e0000
ENABLE_PAGE_HEAP COLLECT_STACK_TRACES USE_DLL_NAMES
NormalHeap - 15e0000
HEAP_GROWABLE HEAP_CLASS_1

Note that the list of dll names under USE_DLL_NAMES is empty. Using
regedit, I look at the PageHeapTargetDlls registry entry for my .exe.
It shows my dll name followed by an ellipsis (...). If I right-click
on the registry entry and select "Modify binary data", regedit shows a
null-terminated Unicode string followed by a bunch of zeros to total
1021 bytes (suspiciously close to 1024 bytes). If I right click on the
registry entry and select "Modify" and then simply hit OK without
making any changes, the ellipsis is gone, the unnecessary trailing
zeros are gone, and windbg shows my dll name correctly. That's bug #1
and workaround #1.

For bug #2, under the heaps test, set the Addr property to true. Leave
the AddrStart and AddrEnd properties at 0 and 0xffffffff,
respectively. Fire up windbg on your .exe and do the heap -p again:

0:000> !heap -p

Active GlobalFlag bits:
vrf - Enable application verifier
hpa - Place heap allocations at ends of pages

StackTraceDataBase @ 00150000 of size 01000000 with 00000000
traces

PageHeap enabled with options:
ENABLE_PAGE_HEAP
COLLECT_STACK_TRACES
USE_DLL_RANGE
SizeRangeStart 00000000 SizeRangeEnd 00000000

Note the SizeRangeEnd is displayed incorrectly. Application Verifier
appears to function correctly (i.e. the sizeRangeEnd is really
0xffffffff and not 0), so this appears to be just a display issue.
That's bug #2.

You might argue that bug #3 is not a bug after all, but I'll mention
it for the sake of completeness. The maximum number of bytes that
application verifier reads from the PageHeapTargetDlls registry entry
is 512. The inclusion list I'd like to use is significantly larger
than this.

That brings me to my feature request. Instead of a huge list (which
doesn't work) of all of the dlls I'd like to use full page heap on,
please allow me to specify a list of dlls to exclude from full page
heap. In other words, I'd like to run full page heap on all of my dlls
except a specified handful. Instead of (or in addition to) an
inclusion list, I'd really like an exclusion list.

Thanks,
David
subba
2008-07-15 01:25:01 UTC
Permalink
Issues you mentioned in #1,#2 are working properly in functionality. It
should be display issues only.

#3 is by design. We will try to increase in the next release.

I logged a work item with your comments , thanks for the feedback.

--Subba Raju
Post by i***@gmail.com
I'm using Application Verifier 3.4.0158. Using the GUI, I select File-
Add Application and type the name of my .exe into the dialog box. In
the Tests window, I expand Basics and Click on Heaps. In the
properties window, I click on Dlls and type the name of a dll. I save
the settings to the registry. When I run the program under windbg and
0:000> !heap -p
vrf - Enable application verifier
hpa - Place heap allocations at ends of pages
traces
ENABLE_PAGE_HEAP
COLLECT_STACK_TRACES
USE_DLL_NAMES
+ 1150000
ENABLE_PAGE_HEAP COLLECT_STACK_TRACES USE_DLL_NAMES
NormalHeap - 1250000
HEAP_GROWABLE
+ 1360000
ENABLE_PAGE_HEAP COLLECT_STACK_TRACES USE_DLL_NAMES
NormalHeap - 1460000
HEAP_GROWABLE HEAP_CLASS_1
+ 14e0000
ENABLE_PAGE_HEAP COLLECT_STACK_TRACES USE_DLL_NAMES
NormalHeap - 15e0000
HEAP_GROWABLE HEAP_CLASS_1
Note that the list of dll names under USE_DLL_NAMES is empty. Using
regedit, I look at the PageHeapTargetDlls registry entry for my .exe.
It shows my dll name followed by an ellipsis (...). If I right-click
on the registry entry and select "Modify binary data", regedit shows a
null-terminated Unicode string followed by a bunch of zeros to total
1021 bytes (suspiciously close to 1024 bytes). If I right click on the
registry entry and select "Modify" and then simply hit OK without
making any changes, the ellipsis is gone, the unnecessary trailing
zeros are gone, and windbg shows my dll name correctly. That's bug #1
and workaround #1.
For bug #2, under the heaps test, set the Addr property to true. Leave
the AddrStart and AddrEnd properties at 0 and 0xffffffff,
0:000> !heap -p
vrf - Enable application verifier
hpa - Place heap allocations at ends of pages
traces
ENABLE_PAGE_HEAP
COLLECT_STACK_TRACES
USE_DLL_RANGE
SizeRangeStart 00000000 SizeRangeEnd 00000000
Note the SizeRangeEnd is displayed incorrectly. Application Verifier
appears to function correctly (i.e. the sizeRangeEnd is really
0xffffffff and not 0), so this appears to be just a display issue.
That's bug #2.
You might argue that bug #3 is not a bug after all, but I'll mention
it for the sake of completeness. The maximum number of bytes that
application verifier reads from the PageHeapTargetDlls registry entry
is 512. The inclusion list I'd like to use is significantly larger
than this.
That brings me to my feature request. Instead of a huge list (which
doesn't work) of all of the dlls I'd like to use full page heap on,
please allow me to specify a list of dlls to exclude from full page
heap. In other words, I'd like to run full page heap on all of my dlls
except a specified handful. Instead of (or in addition to) an
inclusion list, I'd really like an exclusion list.
Thanks,
David
Loading...