forked from KindDragon/vld
-
Notifications
You must be signed in to change notification settings - Fork 5
/
CHANGES.txt
589 lines (455 loc) · 23.3 KB
/
CHANGES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
Visual Leak Detector (VLD) Version 2.5.3
Change Log / Release Notes
2.5.3 (22 June 2022)
----------------------------
Enhancements:
+ Call QueryVirtualMemoryInformation instead of VirtualQuery to improve performance
Bugs Fixed:
+ Changed cmake file to output vld DLL with expected name extension
+ Changed VLDDisable to report if VLD was enabled on this thread prior to the call
+ Added missing .manifest file
+ Fix AV in FindRealCode due to incorrect restore of page protection flags
2.5.2 (19 August 2020)
----------------------------
Enhancements:
+ VS2017/2019 support added.
+ the log file is now opened in shared read mode which allows in-progress peeks of the file content
Bug Fixes:
+ notify report writer after closing report file
+ %zu is a valid format specifier only from vs2015 onwards
+ fix against a deadlock during logfile close
+ fix for a use after delete of logfile FILE pointer
+ fix: obtain ldrlock before dumping leaks, to avoid deadlocks
2.5.1 (30 January 2017)
----------------------------
Enhancements:
+ PDB added to installer.
Bugs Fixed:
+ Fix ntdll loader patch for Windows 10 (1607) Anniversary Update causing crashes (thanks to ioannis-e).
+ Vld dll loading order fixed with MFC.
+ Supressible msgboxes in setup with cmdline /silent /suppressmsgboxes.
2.5 (09 January 2016)
----------------------------
Enhancements:
+ VS2015 support added.
+ Windows 10 support added.
+ Support MFC 12 MBCS (thanks to mnissl).
+ VLD config through env. vars (thanks to akaStiX).
+ Support detection DllMain allocations (thanks to ioannis-e).
+ Add option to skip reporting crt startup allocations as memory leaks (thanks to ioannis-e).
+ Improve the vld.ini searching from additional locations (thanks to ioannis-e).
+ Changed implementation of FastCallStack::getStackTrace for 32-bit code.
Bugs Fixed:
+ Fix #9519, #9859, #10544, use LoaderLock to serialize any calls which load additional libraries or require access to the Loader Lock (thanks to ioannis-e).
+ Fix #6359, #10553, fix crashes and failure to register COM dlls where Visual Leak Detector is unloaded before IMalloc interface is released (thanks to ioannis-e).
+ Fix #10548, vld.ini search path (thanks to ioannis-e).
+ Fix #10587, Visual Leak Detector reporting strange leaks in CRT module of VC++ (thanks to ioannis-e).
+ Fix #10588, false positives from CRT in VS2013 with /MTd (thanks to ioannis-e).
+ Deadlock fixed with StackWalkMethod=safe.
2.4RC2 (07 April 2014)
----------------------------
Enhancements:
+ VLD will display last internal frame.
+ Installer also add path for static library.
Bugs Fixed:
+ Internal memory leak fixed.
2.4RC (23 March 2014)
----------------------------
Enhancements:
+ VS2013 support added.
+ Improved usage in C code.
+ Setup rewrited to InnoSetup, autopatching common props implemented for VS2008-2013.
+ Called allocation function added to printed callstack.
! Memory leaks count fixed for case static/dynamic linked MFC.
! Release static linked CRT detection improved (VLD_OPT_RELEASE_CRT_RUNTIME define removed).
Bugs Fixed:
+ Memory leaks with static linked CRT fixed for VS2012/2013.
+ Deadlock fixed and missed memory leaks when dll loading (first appear in version 2.2.2).
2.3 (29 April 2013)
----------------------------
Enhancements:
+ Windows 8 support added.
Bugs Fixed:
+ Memory leaks with duplicate thread id fixed (thanks to jlddodger).
2.2.3 (15 Febrary 2012)
----------------------------
Enhancements:
+ New option VLD_OPT_RELEASE_CRT_RUNTIME added. Useful only with define VLD_FORCE_ENABLE.
Bugs Fixed:
+ Memory leaks with static linking fixed finally.
2.2.2 (18 December 2011)
----------------------------
Bugs Fixed:
+ Memory leaks with static linking fixed.
+ Visual Studio C++ 2008/2010 Express Edition compilation fixed.
+ Hang fixed with GetOpenFileName().
2.2.1 (22 November 2011)
----------------------------
Enhancements:
+ strdup and _wcsdup functions support added.
+ Preliminary support for VS 11 added.
Bugs Fixed:
+ Low performance after upgrading from VLD v2.1.
+ Runtime error R6002 fixed because of wrong memory dump format.
+ version.h fixed in installer.
+ Some PVS studio warning fixed.
2.2 (21 Jule 2011)
----------------------------
Enhancements:
+ New functions added: VLDSetReportHook.
Bugs Fixed:
+ Resolved call stack printing fixed.
2.2b (8 Jule 2011)
----------------------------
Enhancements:
+ New functions added: VLDGetLeaksCount, VLDMarkAllLeaksAsReported (see vld.h).
+ Introduced define called VLD_FORCE_ENABLE that allows one to active VLD even if not running in DEBUG.
+ Adding Heap Validation.
+ _aligned... functions and _recalloc support added.
+ Memory leaks additional statistic added.
Bugs Fixed:
+ Issue fixed with loading wrong version of dbghelp.dll on Windows XP and bellow.
+ VLDReportLeaks with aggregate duplicate links fixed.
+ CoTaskMemAlloc memory leak detection fixed.
+ Rare crash at exit on some platforms fixed.
+ Asserts in release build disabled.
+ LoaderLock fixed.
+ LoadLibrary crash fixed with some applications like regsrv32.
+ Callstack hash fixed with ASLR.
+ VLDGlobalEnable fixed with new threads.
+ Option VLD_OPT_MODULE_LIST_INCLUDE fixed.
2.1 (26 March 2011)
----------------------------
Enhancements:
+ New functions added: VLDGlobalDisable, VLDGlobalEnable, VLDGetOptions,
VLDGetReportFilename, VLDSetOptions, VLDSetModulesList,
VLDGetModulesList, VLDResolveCallstacks (see vld.h).
+ Option VLD_OPT_SKIP_HEAPFREE_LEAKS added.
+ Hash for each leak added
+ Supported loading symbols from Visual Studio symbol cache directory
Bugs Fixed:
+ Improved LdrLoadDll, GetProcAddress hooking on Windows 7.
+ "HMODULE not founded" bug fixed.
+ Bugs fixed when VLD off.
+ Problem fixed with GetModuleHandleW for SxS dll's (mfc*.dll, msvcr*.dll).
+ Unicode-to-multibyte conversion fixed.
2.1 (26 March 2011)
----------------------------
Enhancements:
+ New functions added: VLDGlobalDisable, VLDGlobalEnable, VLDGetOptions,
VLDGetReportFilename, VLDSetOptions, VLDSetModulesList,
VLDGetModulesList, VLDResolveCallstacks (see vld.h).
+ Option VLD_OPT_SKIP_HEAPFREE_LEAKS added.
+ Hash for each leak added
+ Supported loading symbols from Visual Studio symbol cache directory
Bugs Fixed:
+ Improved LdrLoadDll, GetProcAddress hooking on Windows 7.
+ "HMODULE not founded" bug fixed.
+ Bugs fixed when VLD off.
+ Problem fixed with GetModuleHandleW for SxS dll's (mfc*.dll, msvcr*.dll).
+ Unicode-to-multibyte conversion fixed.
2.0b (24 August 2010)
----------------------------
Enhancements:
+ Added new commands: VLDReportLeaks, VLDRefreshModules, VLDEnableModule,
VLDDisableModule, VLDSetReportOptions (see vld.h).
Bugs Fixed:
+ Problems with MSVC 2008 SP1 fixed. Thanks to Laurent Lessieux for contributing this patch.
2.0a (13 May 2010)
----------------------------
Enhancements:
+ Renamed vld dll files.
Bugs Fixed:
+ Problem with MSVC 2010 Unicode library fixed.
2.0 (25 April 2010)
----------------------------
Enhancements:
+ Added support to work with 64-bit applications
+ Added support to work with Visual Studio 2010
1.9h beta (24 February 2009)
----------------------------
Enhancements:
+ Added support to work with Visual Studio 2008.
Known Bugs/Restrictions:
+ Same bugs/restrictions as version 1.9f.
1.9g beta (16 April 2008)
----------------------------
Bugs Fixed:
+ Another deadlock condition may occur when loading DLLs into the process
being debugged. Special thanks to Eric Bissonnette and Kristian Paradis for
contributing this patch.
Known Bugs/Restrictions:
+ Same bugs/restrictions as version 1.9f.
1.9f beta (18 November 2006)
----------------------------
Bugs Fixed:
+ Deadlocks or access violations may occur when loading DLLs into
multithreaded processes.
+ In multithreaded programs, if the main thread terminates before other
threads in the process, then Visual Leak Detector may cause an access
violation while generating the memory leak report.
Known Bugs/Restrictions:
+ Memory allocations made through calls to functions loaded from a DLL using
delayed loading may not be detected.
+ Support for programs that use MFC 7.0 or MFC 7.1 is not complete yet. Some
memory leaks from such MFC-based programs may not be detected.
+ Visual Leak Detector may report leaks internal to Visual Leak Detector
if the main thread of the process terminates while other threads are still
running.
+ If more than one copy of the same C Runtime DLL is loaded in the process at
the same time, then some leaks may go undetected (note that loading more
than one copy of the C Runtime DLL into a process at the same time is
probably a bad idea to begin with).
1.9e beta (16 November 2006)
----------------------------
New Features/Enhancements:
+ Added a master on/off switch configuration option to vld.ini that can be
used to completely disable Visual Leak Detector.
Bugs Fixed:
+ Numerous deadlock situations. The multithread synchronization scheme has
been completely re-written which should make deadlocks in VLD much less
likely to happen.
+ An access violation will occur in VLD if GetProcAddress is called to obtain
an export's address by ordinal, for certain libraries.
+ Problems may potentially occur when the program being debugged exits due to
the Debug Help Library having been detached from the process too early.
Symptoms might include access violation exceptions or other erratic behavior
just as the program exits and while VLD is generating the leak report.
+ The copy of vld.ini installed in VLD's installation directory overrides any
other copies of vld.ini that are created, even copies placed in the
working directory of the program being debugged.
Known Bugs/Restrictions:
+ Memory allocations made through calls to functions loaded from a DLL using
delayed loading may not be detected.
+ Support for programs that use MFC 7.0 or MFC 7.1 is not complete yet. Some
memory leaks from such MFC-based programs may not be detected.
+ If more than one copy of the same C Runtime DLL is loaded in the process at
the same time, then some leaks may go undetected (note that loading more
than one copy of the C Runtime DLL into a process at the same time is
probably a bad idea to begin with).
1.9d beta (12 November 2006)
----------------------------
Bugs Fixed:
+ Failed assertion "freed == TRUE" pops up when running a program with VLD
without the debugger attached.
+ Some, but not all, multithreaded programs that dynamically load and unload
many DLLs have been known to experience problems, such as deadlocks or
exceptions, when used with VLD.
+ Failed assertion "exportmodule != NULL" pops up when running some programs
with VLD.
+ VLD fails to show file names or function names in the memory leak report for
some programs that are linked with the dynamic CRT library.
+ Access violation exceptions are thrown, but caught by the operating system,
when running some programs with VLD.
1.9c beta (6 November 2006)
---------------------------
New Features/Enhancements:
+ New NSIS installer makes setting up and using VLD much easier.
+ No need to manually copy dbghelp.dll to the right location, VLD will always
find the right version.
+ MFC 8.0 is now fully supported.
+ The memory leak report is now written to the output window much faster.
Support has been added, through a new configuration option, to slow down
the report output for older versions of Visual Studio that have trouble
when it is written too quickly.
Bugs Fixed:
+ All known compatibilities with Visual Studio 2005 have been eliminated.
+ Leaks from calloc may go undetected.
+ Leaks from vector new operator may go undetected.
+ VLDDisable and VLDEnable do not work as expected; some memory leaks that
should be ignored by VLD due to a previous call to VLDDisable are still
reported.
+ Unloading and reloading a previously loaded module may cause leaks that
occur in the module after it was reloaded to go undetected.
+ If vld.h is included in a release build, then the compiler will generate
errors if the VLDEnable or VLDDisable APIs have been used.
1.9b beta (26 October 2006)
---------------------------
Bugs Fixed:
+ Source compiles under Visual Studio 2005 and the binaries are compatible
with applications that link with the Visual Studio 2005 C Runtime Library
(msvcr80d.dll).
Known Restrictions in this Release:
+ Memory allocations made through calls to functions loaded from a DLL using
delayed loading may not be detected.
+ Support for programs that use MFC 7.0, MFC 7.1, or MFC 8.0 is not complete
yet. Some memory leaks from such MFC-based programs may not be detected. A
workaround for this restriction is to forcefully include the MFC DLLs in
memory leak detection, by setting the "ForceIncludeModules" configuration
option to: "mfc70d.dll mfc71d.dll mfc80d.dll" and explicitly adding vld.lib
as an input file on the linker command line (can be added through project
settings by adding it to the list of library modules in the linker options).
This restriction does not apply to programs that use MFC 4.2, which is fully
supported.
1.9a beta (9 March 2006)
------------------------
New Features/Enhancements:
+ All new leak detection engine detects most, if not all, in-process memory
leaks, not just leaks from "new" or "malloc", including COM-based leaks.
+ Packaged as an easier-to-use DLL. There's no longer any need to carefully
decide which modules should be linked with the VLD library. Instead, you
just include the vld.h header file in at least one source file from each
module (DLL or EXE) to be included in memory leak detection.
+ Configuration is done from an INI file instead of using preprocessor macros.
This allows VLD's configuration to be changed without needing to recompile
the program.
+ Many new configuration options have been added. One of the most often
requested option that has been added is the option to save the leak report
to a file instead of, or in addition to, the debugger.
Bugs Fixed:
+ The improved design of the new leak detection engine has resolved all of the
previously known restrictions in version 1.0.
Known Restrictions in this Release:
+ Memory allocations made through calls to functions loaded from a DLL using
delayed loading may not be detected.
+ Support for programs that use MFC 7.0, MFC 7.1, or MFC 8.0 is not complete
yet. Some memory leaks from such MFC-based programs may not be detected. A
workaround for this restriction is to forcefully include the MFC DLLs in
memory leak detection, by setting the "ForceIncludeModules" configuration
option to: "mfc70d.dll mfc71d.dll mfc80d.dll" and explicitly adding vld.lib
as an input file on the linker command line (can be added through project
settings by adding it to the list of library modules in the linker options).
This restriction does not apply to programs that use MFC 4.2, which is fully
supported.
1.0 (5 August 2005)
-------------------
New Features/Enhancements:
+ Memory leak detection can now be selectively disabled and enabled at
runtime, using provided APIs. This provides a straightforward way of
allowing VLD to selectively "ignore" certain allocations. It can also be
used to disable VLD altogether at runtime, improving application performance
without needing to recompile.
+ If there are multiple identical memory leaks (i.e. leaks that originate from
the same call stack and that leak the same size memory block) then VLD can
optionally aggregate all of the repeated leaks, showing only the first such
leaked block in detail in the memory leak report. A tally of the total
number of leaks that match that particular size and call stack accompanies
the information for that leak.
+ When VLD is initialized at program startup, the library type which was
linked-in is displayed. This can help verify that the expected VLD library
(either single-threaded static, multithreaded static, or multithreaded DLL)
is being linked with your program.
+ The Visual Leak Detector name is displayed on most messages output to the
debugger to easily differentiate VLD's output from the output produced by
the built-in memory leak detector.
+ If any of the compile-time configuration options have been changed from
their default values, then the current state of the option is displayed in
the debugger when VLD is initialized.
+ VLD's memory leak self-checking capability (checking for leaks in VLD
itself) can be verified using a new preprocessor macro that allows VLD to
perform a self-test at runtime.
Bugs Fixed:
+ If the MFC libraries are statically linked to the program being debugged,
then MFC will erroneously report memory leaks in the Visual Leak Detector
code and may cause an access violation while attempting to report the false
memory leaks. These bogus leaks are always reported as "client block at
<address>, subtype bf42" and are claimed to be "invalid objects".
+ VLD will leak a fixed-sized block of memory when the program exits if VLD
failed to initialize because the Debug Help library (dbghelp.dll) could not
be loaded.
+ In multithreaded programs, if the program's main thread terminates before
other threads in the same process, then VLD may cause an access violation
while freeing resources used internally by VLD.
0.9i beta (30 April 2005)
-------------------------
New Features/Enhancements:
+ Added support in the source code for x64 architecture. The pre-built
libraries will continue to support 32-bit only. If you need 64-bit support
you'll need to build 64-bit versions of the libraries from source. Note that
x64 is the only 64-bit architecture supported at this time. Itanium (aka
IA-64) is NOT currently supported.
Bugs Fixed:
+ VLD does not report memory leaks that are the result of a failure to free
memory allocated via a call to realloc().
+ In multithreaded programs, if the program's main thread terminates before
other threads in the same process, then VLD may cause an access violation
while checking for memory leaks.
+ If VLD cannot find the source file and line number information for a program
address, the last known file and line number will be repeated in the call
stack section of the memory leak report. The correct behavior should be for
VLD to print "File and line number not available" for that call stack entry.
0.9h beta (22 April 2005)
-------------------------
Bugs Fixed:
+ Access Violations occur at random places within the VLD code when using
VLD version 0.9g.
+ When using VLD version 0.9g, VLD may fail to report some memory leaks.
0.9g beta (22 April 2005)
-------------------------
New Features/Enhancements:
+ Replaced the temporary internal search algorithm with a permanent search
algorithm that is much faster. Programs that dynamically allocate a large
number of memory blocks (tens of thousands or more) will see the most
significant performance boost from this version of VLD versus the previous
version. Overall, this is the fastest version of VLD released to date.
0.9f beta (13 April 2005)
-------------------------
New Features/Enhancements:
+ Changed the internal search algorithm to a temporary simpler, but
more stable algorithm. A permanent algorithm which should be much
more efficient will be in a forthcoming release.
Bugs Fixed:
+ Access Violation at line 319 in vldutil.cpp may occur when running a
program linked with the VLD library.
0.9e beta (12 April 2005)
-------------------------
New Features/Enhancements:
+ VLD no longer uses any STL containers or STL strings. This solves all of the
compatibility problems with Visual Studio .NET when using the pre-built
VLD libraries.
+ The configuration preprocessor macros now work with C programs without the
need to call VLDConfigure from within the program being debugged.
Because VLDConfigure is now obsolete, it has been removed.
+ One new source file (vldutil.cpp) and one new header (vldutil.h) have been
added. They contain utility functions and utility classes that replace
functionality previously performed by STL containers and strings.
+ The VisualLeakDetector global class object is now constructed at C runtime
initialization (i.e. it resides in the "compiler" initialization area).
Because VLD no longer uses any STL components, there is no longer the risk
that VLD will conflict with any STL libraries that also are constructed at
C runtime initialization. The end result is that VLD starts running earlier
and is destroyed later, which leads to more accurate leak detection.
Bugs Fixed:
+ Linking to the VLD 0.9d libraries from the VLD distribution under Visual
Studio .NET results in a number of linker "unresolved external symbol"
errors. Unresolved symbols include "__declspec(dllimport) void __cdecl
std::_Xran(void)" and "__declspec(dllimport) private: void __thiscall
std::basic_string,class std::allocator >::_Eos(unsigned int)", among others.
+ Call stacks do not appear in the memory leak report when linking against
release VLD libraries built from source with Visual Studio .NET.
+ If the preprocessor macro VLD_MAX_DATA_DUMP is defined as 0 (zero), then VLD
will get stuck in an infinite loop, repeatedly printing the same information
while attempting to display the memory leak report in the debugger's output
window.
0.9d beta (30 March 2005)
-------------------------
New Features/Enhancements:
+ This version of VLD brings with it some major changes to the way VLD
interfaces with programs that use it. Instead of requiring that VLD be built
from source and then linked with the application, VLD is now packaged as a
pre-built static library. For those who just want to use VLD and are not
interested in modifying the source, this eliminates the complexities of
building VLD from source. A single header file, vld.h, has been added. To
link with the static library, this header needs to be included in one of the
program's source files. Please see the README.txt file for details on how
these changes affect how to use Visual Leak Detector.
+ The Microsoft Debug Help Library (dbghelp.dll) version 6.3 is now included
with the VLD distribution.
0.9c beta (17 March 2005)
-------------------------
Bugs Fixed:
+ Compile error, "error C2039: 'size' : is not a member of '_CrtMemBlockHeader'"
occurs at line 644 of vld.cpp when building VLD with the VLD_MAX_DATA_DUMP
preprocessor macro defined.
0.9b beta (15 March 2005)
-------------------------
Bugs Fixed:
+ VLD fails to detect memory leaks in class constructors if the objects
constructed are global objects.
+ If a debug executable is built with certain compiler optimizations turned on,
specifically frame pointer omission optimization or automatic inlining, then
theoretically VLD may produce incomplete or inaccurate stack traces or might
fail to produce stack traces altogether.
0.9a beta (12 March 2005)
-------------------------
Initial Public Release