Insure++: Difference between revisions
No edit summary |
→External links: Added 2 external links - one to a paper by Iowa State |
||
Line 34: | Line 34: | ||
== External links == |
== External links == |
||
* [http://www.parasoft.com/Insure Parasoft's ''Insure++'' site] |
* [http://www.parasoft.com/Insure Parasoft's ''Insure++'' site] |
||
* [http://grl.public.iastate.edu/Runtime.errors.Paper.March4.2006.pdf "A Survey of Systems for Detecting Serial Run-Time Errors" by The Iowa State University’s High Performance Computing Group] |
|||
* [http://www.linuxjournal.com/article/2951 Linux Journal review of Parasoft Insure++] |
|||
[[Category:Memory management software]] |
[[Category:Memory management software]] |
Revision as of 16:21, 7 December 2007
Developer(s) | Parasoft |
---|---|
Stable release | |
Operating system | Cross Platform |
Type | Profiler / Memory debugger |
License | Proprietary software |
Website | Insure++ at Parasoft.com |
Insure++ is a memory debugger computer program, used by software developers to detect various errors in programs written in C and C++. It is made by Parasoft, and is functionally similar to other memory debuggers, such as Purify and Valgrind.
Overview
Insure++ can automatically find erroneous accesses to free()d memory, array bounds violations, freeing unallocated memory (which often happens when a programmer free()s the same memory twice, or when he free()s global or stack memory), and many others.
Unlike Purify and Valgrind, Insure++ inserts its instrumentation at the source code level, which allows it to detect errors that the other tools miss. In particular, Insure++ can detect buffer overflows in automatic arrays, and overflows which involve pointers that accidentally "jump" from one valid memory region to another, as in the following example:
#include <stdlib.h> int main() { char *p = malloc(1024); /* first dynamically-allocated block */ char *q = malloc(1024); /* second block */ p += 1200; /* At this point, "p" is very (un)likely to point into the second block. False assumptions about the real behaviour lead to mistakes. */ *p = 'a'; /* invalid write (past the end of the first block) */ return 0; }
Also the source level instrumentation allows it to not only identify that a leak occurred, but where it occurred. Some tools merely provide information about where the memory was allocated, Insure++ also gives a stack trace for when/where the actual leak occurred.