[LLVMdev] Introducing LLBrowse: A graphical browser for LLVM modules

Talin viridia at gmail.com
Fri Feb 11 23:22:42 PST 2011


I've written a little GUI application that displays an LLVM module as an
expandable tree, which can be useful for examining the module's contents.
Some features:

   - Based on wxWidgets, so it's completely cross-platform.
   - CMake build script can locate both LLVM and wxWidgets installations
   automatically.
   - Loads either .ll or .bc files.
   - Supports browsing of LLVM types, variables, functions, aliases, and
   metadata. I'm working on supporting a more structured view of DWARF DIEs,
   but that is not complete.
   - Tree nodes are created lazily as needed.
   - The tree node system is highly extensible, each different LLVM object
   type is represented by a tree node class, adding new node classes is
   extremely easy.
   - The code is very straightforward and easy to read.
   - All image resources are embedded in the final executable, so the
   compiles program is just a single binary file, very easily installed.

This is still a work in progress, but I think it's ready for people to start
hacking on.

If there is interest, I can check the code into the llvm.org svn somewhere -
I just need to know where to put it. Otherwise, I'm happy to email a zip
archive to folks who are interested. I'm willing to release the code under
whatever license is most convenient.

Here's a screenshot of what it looks like:

[image: llbrowse.png]

And here's what the node class for displaying variables looks like, as an
example:

class VariableItem : public TreeItemBase {
public:
  VariableItem(const llvm::Module* module, const llvm::GlobalVariable* var)
    : module_(module), var_(var) {}

  // Overrides

  int GetIcon() const;
  wxString GetCaption() const;
  void CreateChildren(wxTreeCtrl* tree, const wxTreeItemId& id);
  bool CanCreateChildren() const;
  void ShowDetails(DetailsView* detailsView);

private:
  const llvm::Module* const module_;
  const llvm::GlobalVariable* const var_;
};


-- 
-- Talin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110211/aac344f7/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: llbrowse.png
Type: image/png
Size: 66648 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110211/aac344f7/attachment.png>


More information about the llvm-dev mailing list