273:, but do not help to detect the non-fatal memory errors. Debuggers are useful for other things that PurifyPlus is not intended for, such as for stepping through the code line by line or examining the program's memory by hand at a particular moment of execution. In other words, these tools can complement each other for a skilled developer.
240:
The errors that PurifyPlus discovers include array bounds reads and writes, trying to access unallocated memory, freeing unallocated memory (usually due to freeing the same memory for the second time), as well as memory leaks (allocated memory with no pointer reference). Most of these errors are not
299:. These languages can however still have leaks; unnecessary references to objects will prevent the memory from being re-allocated. IBM has a product called Rational Application Developer to uncover these sorts of errors.
233:, including libraries. That way, if a memory error occurs, the program will print out the exact location of the error, the memory address involved, and other relevant information. PurifyPlus also detects
245:
is wrong due to incorrect program behavior. Hence PurifyPlus helps by detecting these errors and telling the programmer exactly where they occur. Because PurifyPlus works by instrumenting all the
237:. By default, a leak report is generated at program exit but can also be generated by calling the PurifyPlus leak-detection API from within an instrumented application.
253:
libraries. These errors are often caused by the programmer passing incorrect arguments to the library calls, or by misunderstandings about the protocols for freeing
269:. By contrast, debuggers generally only allow the programmer to quickly find the sources of fatal errors, such as a program crash due to dereferencing a null
283:
It is worth noting that using PurifyPlus makes the most sense in programming languages that leave memory management to the programmer. Hence, in
241:
fatal (at least not at the site of the error), and often when just running the program there is no way to detect them, except by observing that
669:
664:
199:
PurifyPlus allows dynamic verification, a process by which a program discovers errors that occur when the program runs, much like a
674:
270:
645:"A Survey of Systems for Detecting Serial Run-Time Errors" by The Iowa State University’s High Performance Computing Group
229:
with PurifyPlus, corrected verification code is automatically inserted into the executable by parsing and adding to the
284:
65:
265:
The ability to detect non-fatal errors is a major distinction between PurifyPlus and similar programs from the usual
167:. Pure Software later merged with Atria Software to form Pure Atria Software, which in turn was later acquired by
288:
216:
152:
644:
204:
108:
91:
659:
226:
168:
628:
599:
250:
103:
81:
594:
254:
144:
96:
119:
211:
without ever compiling or running it, just by discovering logical inconsistencies. The
604:
176:
179:, Inc. on Dec 31, 2014. It is functionally similar to other memory debuggers, such as
653:
212:
188:
164:
160:
54:
41:
292:
257:
used by the libraries. These are often the most difficult errors to find and fix.
151:
developers to detect memory access errors in programs, especially those written in
17:
609:
296:
246:
234:
230:
208:
180:
277:
48:
36:
266:
219:
200:
184:
148:
631:
by Reed
Hastings and Bob Joyce, Usenix Winter 1992 technical conference.
276:
PurifyPlus also includes other functionality, such as high-performance
295:, for example, automatic memory management reduces occurrence of any
156:
280:, which are of general use while using a debugger on one's code.
172:
629:
Purify: fast detection of memory leaks and access errors.
249:, it detects errors that occur inside of third-party or
114:
102:
90:
80:
64:
47:
35:
207:, by contrast, involves detecting errors in the
8:
499:Foundation, Essential, Standard, Data Center
30:
29:
516:
311:
621:
261:Differences from traditional debuggers
222:is an example of static verification.
7:
25:
539:(unmanaged code) data collection
446:(Server/Desktop) base through 7.9
441:(Server/Desktop) base through 8.9
436:(Server/Desktop) base through 9.4
405:(Server/Desktop) base through 7.9
400:(Server/Desktop) base through 8.9
395:(Server/Desktop) base through 9.4
171:, which in turn was acquired by
572:(managed code) data collection
159:. It was originally written by
553:code coverage data collection
71:8.2 / September 20, 2024
53:UNICOM Systems, a division of
1:
513:Supported Java/.NET platforms
497:Microsoft Windows Server 2012
492:Microsoft Windows Server 2016
487:Microsoft Windows Server 2019
691:
670:Rational Software software
665:Memory management software
578:3.0 through 4.5 used with
567:
548:
534:
529:
472:
467:
426:
387:
382:
356:
332:
327:
321:Operating system versions
203:. Static verification or
530:
468:
383:
328:
308:Supported C/C++ platforms
76:
60:
318:Processor architectures
580:Microsoft Visual Studio
543:Microsoft Visual Studio
504:Microsoft Visual Studio
175:, and then divested to
86:Windows, Linux, Solaris
27:Memory debugger program
675:Divested IBM products
523:Data collection type
494:Standard, Data Center
489:Standard, Data Center
526:Runtime environment
482:Microsoft Windows 10
205:static code analysis
109:Proprietary software
303:Supported platforms
32:
18:IBM Rational Purify
582:2010 through 2022
545:2010 through 2022
506:2010 through 2022
225:When a program is
37:Original author(s)
586:
585:
510:
509:
484:base through 21H1
456:base through 12.5
451:base through 15.5
415:base through 12.5
410:base through 15.5
378:5.10 through 5.15
366:base through 11.4
352:5.10 through 5.15
340:base through 11.4
315:Operating system
169:Rational Software
138:
137:
31:UNICOM PurifyPlus
16:(Redirected from
682:
632:
626:
600:Programming tool
564:1.5 through 1.8
517:
345:base through U11
312:
251:operating system
147:program used by
134:
131:
129:
127:
125:
123:
121:
82:Operating system
33:
21:
690:
689:
685:
684:
683:
681:
680:
679:
650:
649:
641:
636:
635:
627:
623:
618:
595:Memory debugger
591:
560:
515:
500:
495:
490:
485:
477:
475:
464:
457:
452:
447:
442:
437:
429:
423:
416:
411:
406:
401:
396:
379:
372:
367:
359:
353:
346:
341:
334:Sun UltraSPARC
310:
305:
263:
255:data structures
197:
145:memory debugger
118:
97:Memory debugger
72:
28:
23:
22:
15:
12:
11:
5:
688:
686:
678:
677:
672:
667:
662:
652:
651:
648:
647:
640:
639:External links
637:
634:
633:
620:
619:
617:
614:
613:
612:
607:
605:Dynamic memory
602:
597:
590:
587:
584:
583:
576:.NET Framework
573:
566:
565:
554:
547:
546:
540:
533:
532:
528:
527:
524:
521:
514:
511:
508:
507:
501:
479:
471:
470:
466:
465:
458:
431:
425:
424:
417:
390:
386:
385:
381:
380:
373:
371:U6 through U11
361:
355:
354:
347:
335:
331:
330:
326:
325:
322:
319:
316:
309:
306:
304:
301:
262:
259:
196:
193:
177:UNICOM Systems
136:
135:
116:
112:
111:
106:
100:
99:
94:
88:
87:
84:
78:
77:
74:
73:
70:
68:
66:Stable release
62:
61:
58:
57:
51:
45:
44:
39:
26:
24:
14:
13:
10:
9:
6:
4:
3:
2:
687:
676:
673:
671:
668:
666:
663:
661:
658:
657:
655:
646:
643:
642:
638:
630:
625:
622:
615:
611:
608:
606:
603:
601:
598:
596:
593:
592:
588:
581:
577:
574:
571:
568:
563:
558:
555:
552:
549:
544:
541:
538:
535:
525:
522:
519:
518:
512:
505:
502:
498:
493:
488:
483:
480:
473:
462:
459:
455:
450:
445:
440:
435:
432:
427:
421:
418:
414:
409:
404:
399:
394:
391:
388:
377:
374:
370:
365:
362:
357:
351:
348:
344:
339:
336:
333:
323:
320:
317:
314:
313:
307:
302:
300:
298:
294:
290:
286:
281:
279:
274:
272:
268:
260:
258:
256:
252:
248:
244:
238:
236:
232:
228:
223:
221:
218:
214:
213:type checking
210:
206:
202:
194:
192:
190:
189:BoundsChecker
186:
182:
178:
174:
170:
166:
165:Pure Software
162:
161:Reed Hastings
158:
154:
150:
146:
142:
133:
117:
113:
110:
107:
105:
101:
98:
95:
93:
89:
85:
83:
79:
75:
69:
67:
63:
59:
56:
55:UNICOM Global
52:
50:
46:
43:
42:Pure Software
40:
38:
34:
19:
624:
579:
575:
569:
561:
556:
550:
542:
536:
503:
496:
491:
486:
481:
463:4 through 11
460:
453:
448:
443:
438:
433:
422:4 through 11
419:
412:
407:
402:
397:
392:
389:Intel IA-32
375:
368:
363:
349:
342:
337:
297:memory leaks
293:Visual Basic
282:
275:
264:
242:
239:
235:memory leaks
224:
198:
140:
139:
49:Developer(s)
610:Memory leak
559:5 through 8
474:Intel IA-32
461:GNU gcc/g++
420:GNU gcc/g++
278:watchpoints
247:object code
231:object code
209:source code
130:/purifyplus
654:Categories
616:References
369:Solaris 10
364:Solaris 11
343:Solaris 10
338:Solaris 11
324:Compilers
141:PurifyPlus
660:Debuggers
520:Platform
430:Intel 64
376:Sun C/C++
360:Intel 64
350:Sun C/C++
267:debuggers
243:something
128:/products
124:.unicomsi
122:.teamblue
589:See also
531:Windows
476:Intel 64
469:Windows
329:Solaris
220:compiler
201:debugger
195:Overview
185:Valgrind
181:Insure++
149:software
562:SUN JRE
557:IBM JRE
478:AMD 64
454:SLES 12
449:SLES 15
413:SLES 12
408:SLES 15
271:pointer
115:Website
104:License
444:RHEL 7
439:RHEL 8
434:RHEL 9
403:RHEL 7
398:RHEL 8
393:RHEL 9
384:Linux
227:linked
537:C/C++
428:AMD64
358:AMD64
291:, or
215:by a
187:and
143:is a
570:.NET
551:Java
289:Lisp
285:Java
126:.com
92:Type
173:IBM
163:of
157:C++
155:or
120:www
656::
287:,
191:.
183:,
217:C
153:C
132:/
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.