NAME
stringdups
—
Identify duplicate strings or other
objects in malloc blocks of a target process
SYNOPSIS
stringdups |
[-minimumCount count]
[-stringsOnly ] [-nostacks ]
[-callTrees ]
[-invertCallTrees ] pid |
partial-executable-name |
memory-graph-file |
DESCRIPTION
stringdups
examines the content of malloc
blocks in the specified target process. For all blocks which have the same
content, it shows a line with the number of such blocks, their total
allocated size (the total size in the malloc heap, not just the specific
size of their content), and the average allocated size.
stringdups
requires one argument -- either
the process ID or the full or partial executable name of the process to
examine, or the pathname of a memory graph file generated by
leaks.
When generating a memory graph with
leaks
for use with
stringdups
it is necessary to use the
-fullContent
argument to include labels describing
the contents of memory.
If the MallocStackLogging environment variable was set when the
target process was launched, stringdups
also
displays stack backtraces or call trees showing where all the blocks with a
particular grouping of content were allocated.
stringdups
gathers the content of blocks
of various types including:
- C strings (composed of UTF8 characters, null terminated, of any length)
- Pascal strings (composed of UTF8 characters with length byte at start, no longer than 255 characters, not necessarily null terminated)
- NSString of all types (immutable, mutable, UTF8, Unicode). Malloc blocks which are the storage blocks for non-inline or mutable NSString's are listed separately. The string content is shown for both but the block sizes accurately show what is allocated in the malloc heap for that particular chunk of storage.
- NSDate
- NSNumber
- NSPathStore2 (Cocoa's representation of file paths)
- __NSMallocBlock__ For these,
stringdups
shows the symbol name of the code block (^) that this storage is associated with. If debug information is available, the source path and line number of the code block are also shown. - item counts for collection classes such as NSArray, NSSet, and NSDictionary
OPTIONS
-minimumCount
count- Only print information for object descriptions which appear at least count times in the target process. The default minimum count is 2. To see all strings in the target process, use 1 or use 'heap <pid> -addresses all'.
-stringsOnly
- Only print information for objects that have string content such as C or Pascal strings, or NSString.
-nostacks
- Do not print stack backtraces or call trees even if the target process has the MallocStackLogging environment variable set.
-callTrees
- If stack backtraces are available, then by default all the object descriptions for a particular stack backtrace are consolidated together. However if this argument is passed then the output is consolidated by each particular string and a call tree is displayed showing the allocation backtraces of all occurrences of objects with that description. This output can be very lengthy if minimumCount is a low value, because the same call tree may be displayed many times.
-invertCallTrees
- Same as
-callTrees
except that the call trees are printed from hottest to coldest stack frame, so the leaf malloc call appears first.
SEE ALSO
heap(1), leaks(1), malloc_history(1), vmmap(1), DevToolsSecurity(1)