Developer: Little Big Monster Inc.
Current Version: 1.4.1
Last Updated: 3 years ago
Download Size: 883.3 KB - Download
Dependency Walker is a utility that scans any 32-bit or 64-bit Mach-O executables (executable, so, dylib or kext) of any architectures (i386, x86_64, ppc, ppc64, arm and arm64) and builds a hierarchical tree diagram of all dependent modules. For each module found, it lists all the functions that are exported by that module, and which of those functions are actually being called by other modules.
Dependency Walker is also very useful for troubleshooting system errors related to loading and executing modules. Dependency Walker detects many common application problems such as missing modules, invalid modules, import/export mismatches, circular dependency errors, mismatched machine types of modules, and module initialization failures.
Dependency Walker handles all types of module dependencies, including binding, lazy, weak, forwarded, and redirected symbols and automatically demangles them to the standard signatures if possible.
• Due to the complication of the mechanism of symbol loading, if a symbol is marked red, it still could be resolved by symbol-redirection system. This happens in several system frameworks, such as CoreFoundation, Quartz, etc.
• For non-native executables, for example, iOS executables, there will be a lot of missing symbols. This is the expected result: these symbol only exists in system of the target architecture.
* Fixed: wrong report of missing symbols in libobjc, libSystem and other system libraries.
Most Helpful Reviews
It just makes debugging easier - I was a Windows programmer and I just began my Mac programming life. In Mac world, I must learn everything from beginning, from IDE to the build toolchain. I got this tool just when I have spent THREE days to find why my app failed to start with a "Segmentation Fault Trap #nnn" message, this tool helped me found it was because of a missing symbol from an old dynamic library. It saved me! And here are what I expect from next version: - auto-find the missing symbols - list the full path name instead of variables such as @executable_path - copy symbol or function signature to clipboard
More Reviews for Current Version
Doesn’t work for for any executable I tried - Tried various iOS arm-64 executables… all result in ‘The document [file] could not be opened. The file is not a valid Mach-O executable’.
Needs some documentation - The tool is pretty nice, but still a little confusing as to what you are looking at. It was obvious, for example, why some items are in red text. I tried to visit the support URL to see if there was online documentation. However, it appears that the domain name itself has expired (and is available for sale). What I would love to have is just even a YouTube video of the author of the program walking you though the various features of the app. One specific confusing point. I bought this because today I'm examining an issue where I have two .dylibs where one is dependnent on the other one. In this specific case they are both being used by a java application through a JNI bridge. When I opened the first library it lists the other library as one of the dependencies. However, it says "0 exports found". There are also dependencies to various system libraries and it lists specific numbers of exports found. For example: Resolving /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation, 2653 exports found. which I take to mean that this specific CoreFoundation library binary exports 2653 symbols. But why does it say 0 from my other library? When I open that second library, the second section down from the top shows some symbols which are exported by that library. The library shows 21 symbols (I had to count them myself because the app doesn't do that for me - although it does for libraries I'm dependent on.) What I am trying to learn from this tool: • The list of symbols that my library is exporting. (It appears to have this) • The list of libraries my library is dependent on. (It has this) • The list of symbols from each library that my library uses. It appears that you get this by selecting the library in the top left section and then it shows those symbols in the top right list box. • Any symbols not found/libraries not found. If I'm looking at an executable, I would want to see the same thing except obviously it doesn't export symbols. Additional questions I have: • Why are some things listsed in red text. • What is the difference between "Function" and "Symbol" and why do some rows not have a "Function" listed. (It looks like it tells you about C++ new and delete operators and v-tablesin the function section, but it would be nice to know how this is derived and its precise meaning. • What does "Index" mean and why some rows don't have an "index". These are the sorts of things that I think could be pretty well covered with a video. You could make a screencast video pretty easily and embed a link to it in the app. I think a big part of the benefit to people buying the app would be to have you explain it and get access to what you learned in the process of building this app. Someone reported they couldn't open an iOS ARM based executable. The program opened an x86_64 executable built with Xcode 8 no problem, but crashed when I tried to open the app I'm working with which is some kind of a Java app (wrapper?), but "file" reports that it is a Mach-O universal binary. Not sure why it crashed.