45
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Using Clang to Visualize Large Codebases Nathan Hawes and Ben Barham Oracle Labs Australia October 2014 Frappé: a code comprehension tool for large codebases

UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Using  Clang  to  Visualize  Large  Codebases  

Nathan  Hawes  and  Ben  Barham  Oracle  Labs  Australia  October  2014  

Frappé:  a  code  comprehension  tool  for  large  codebases  

1  

Page 2: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Safe  Harbour  The  following  is  intended  to  provide  some  insight  into  a  line  of  research  in  Oracle  Labs.  It  is  intended  for  informaMon  purposes  only,  and  may  not  be  incorporated  into  any  contract.  It  is  not  a  commitment  to  deliver  any  material,  code,  or  funcMonality,  and  should  not  be  relied  upon  in  making  purchasing  decisions.  Oracle  reserves  the  right  to  alter  its  development  plans  and  pracMces  at  any  Mme,  and  the  development,  release,  and  Mming  of  any  features  or  funcMonality  described  in  connecMon  with  any  Oracle  product  or  service  remains  at  the  sole  discreMon  of  Oracle.  Any  views  expressed  in  this  presentaMon  are  my  own  and  do  not  necessarily  reflect  the  views  of  Oracle.  

Frappé:  a  code  comprehension  tool  for  large  codebases   2  

Page 3: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Code  Comprehension  The  truth  is  in  the  source!  

Frappé:  a  code  comprehension  tool  for  large  codebases   3  

Page 4: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

But  what  if  that  source  is  large?  

Frappé:  a  code  comprehension  tool  for  large  codebases   4  

10  million  lines  

Page 5: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

But  what  if  that  source  is  large?  

Frappé:  a  code  comprehension  tool  for  large  codebases   5  

10  million  lines  

50  lines  

Page 6: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

But  what  if  that  source  is  large?  

Frappé:  a  code  comprehension  tool  for  large  codebases   6  

10  million  lines  

50  lines  

Page 7: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Code  Comprehension  in  IDEs  

• Go  to  definiMon,  find  uses,  class  overview,  type  hierarchy,  etc.  

•  IDEs  impracMcal  to  use  for  large  C/C++  codebases  – Imprecise  language  recogniMon  – Issues  with  custom  build  systems  

Frappé:  a  code  comprehension  tool  for  large  codebases   7  

Page 8: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

static  VALUE  mnew(…)  {          …          data-­‐>id  =  rid;          …  }    

Find  definiMon      method.h:70  

   node.h:244      thread_pthread.c:594      (+  17  more)    

Actual  definiMon  (14th)      proc.c:21  

Current  PracMce  For  large  C/C++  codebases  

•  Text  editors  and  text-­‐search  tools  – vim,  emacs  – grep,  sed,  cscope  

•  Fast  and  simple  • But  imprecise  à  – Symbol  types,  scopes,  linking  informaMon,  preprocessor  

•  Low-­‐level  focus  

Frappé:  a  code  comprehension  tool  for  large  codebases   8  

Page 9: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Frappé  Aims  

• Provide  precise  dependency  informaMon  – With  easy  build  integraMon  

• Allow  users  to  specify  higher-­‐level  queries  directly  – Not  just  defs  or  refs  

•  Show  users  the  broader  context  of  the  system  

Frappé:  a  code  comprehension  tool  for  large  codebases   9  

Page 10: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Frappé  Overview  

Oracle  ConfidenMal  -­‐  Restricted   10  

Source  Code   Dependency  Graph   User  

QUERY  

DISPLAY  EXTRACT  

Page 11: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Dependency  Graph  

• Natural  representaMon  of  the  code  – Call  graphs,  type  hierarchies,  control  flow  graphs,  etc.  

• Nodes  and  edges  – Build  system:  modules,  files,  and  linking  informaMon  between  them  – File  system:  directories  and  files  – Preprocessor:  includes,  macros,  their  expansion  and  interrogaMons  – Symbols:  funcMons,  locals,  types,  and  relaMons  between  them    

• High-­‐level  quesMons  become  graph  queries  

Oracle  ConfidenMal  -­‐  Restricted   11  

Page 12: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  ConfidenMal  -­‐  Restricted   12  

Go  to  DefiniMon  

scope{}  .buf  main()  

foo()   bar()  

writes   contains  

Page 13: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  ConfidenMal  -­‐  Restricted   13  

Go  to  DefiniMon  

scope{}  .buf  main()  

foo()   bar()  

writes   contains  

Page 14: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  ConfidenMal  -­‐  Restricted   14  

Go  to  DefiniMon  

scope{}  .buf  main()  

foo()   bar()  

writes   contains  

Page 15: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  ConfidenMal  -­‐  Restricted   15  

Find  References  

scope{}  .buf  main()  

foo()   bar()  

writes   contains  

Page 16: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  ConfidenMal  -­‐  Restricted   16  

Find  References  

scope{}  .buf  main()  

foo()   bar()  

writes   contains  

Page 17: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  ConfidenMal  -­‐  Restricted   17  

Find  References  

scope{}  .buf  main()  

foo()   bar()  

writes   contains  

Page 18: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  ConfidenMal  -­‐  Restricted   18  

Impact  EsMmaMon  

first()  pop()  insert()  

#PREV   #FIRST  expands  

init()  

#NULL  

Page 19: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  ConfidenMal  -­‐  Restricted   19  

Impact  EsMmaMon  

first()  pop()  insert()  

#PREV   #FIRST  expands  

init()  

#NULL  

Page 20: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  ConfidenMal  -­‐  Restricted   20  

Impact  EsMmaMon  

first()  pop()  insert()  

#PREV   #FIRST  expands  

init()  

#NULL  

Page 21: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Oracle  ConfidenMal  -­‐  Restricted   21  

Impact  EsMmaMon  

first()  pop()  insert()  

#PREV   #FIRST  expands  

init()  

#NULL  

Page 22: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Frappé  Architecture  

Oracle  ConfidenMal  -­‐  Restricted   22  

EXTRACTOR   IMPORTER  

EDITOR  PLUGINS  

CLI  SCRIPTS  

WEB  UI  

Source  Code   .fo   Server   User  

Page 23: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Frappé  Architecture  

Oracle  ConfidenMal  -­‐  Restricted   23  

EXTRACTOR   IMPORTER  

EDITOR  PLUGINS  

CLI  SCRIPTS  

WEB  UI  

Source  Code   .fo   Server   User  

Page 24: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Extractor  Simple  Build  IntegraLon  

Frappé:  a  code  comprehension  tool  for  large  codebases   24  

Compiler  Wrappers  

NaMve  Compiler  

Clang  +  Plugin   .fo  

.o  

Page 25: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Extractor  Simple  Build  IntegraLon  

Frappé:  a  code  comprehension  tool  for  large  codebases   25  

Compiler  Wrappers  

NaMve  Compiler  

Clang  +  Plugin   .fo  

.o  

Page 26: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Extractor  Simple  Build  IntegraLon  

Frappé:  a  code  comprehension  tool  for  large  codebases   26  

Compiler  Wrappers  

NaMve  Compiler  

Clang  +  Plugin   .fo  

.o  

Page 27: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Extractor  Clang  Plugin  

• PPCallbacks  – Includes,  macros,  their  expansions  and  interrogaMons  

• RecursiveASTVisitor  – Visit  all  declaraMons,  types,  and  expressions  

•  Easy  to  use  interface  – Provides  detailed  locaMon  informaMon  

Frappé:  a  code  comprehension  tool  for  large  codebases   27  

Page 28: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Frappé  Architecture  

Oracle  ConfidenMal  -­‐  Restricted   28  

EXTRACTOR   IMPORTER  

EDITOR  PLUGINS  

CLI  SCRIPTS  

WEB  UI  

Source  Code   .fo   Server   User  

Page 29: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Frappé  Architecture  

Oracle  ConfidenMal  -­‐  Restricted   29  

EXTRACTOR   IMPORTER  

EDITOR  PLUGINS  

CLI  SCRIPTS  

WEB  UI  

Source  Code   .fo   Server   User  

Page 30: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Frappé  Architecture  

Oracle  ConfidenMal  -­‐  Restricted   30  

EXTRACTOR   IMPORTER  

EDITOR  PLUGINS  

CLI  SCRIPTS  

WEB  UI  

Source  Code   .fo   Server   User  

Page 31: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Frappé  Architecture  

Oracle  ConfidenMal  -­‐  Restricted   31  

EXTRACTOR   IMPORTER  

EDITOR  PLUGINS  

CLI  SCRIPTS  

WEB  UI  

Source  Code   .fo   Server   User  

Page 32: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Code  Maps  Visualising  large  codebases  

Frappé:  a  code  comprehension  tool  for  large  codebases   32  

Page 33: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Code  Maps  Using  a  cartographic  map  metaphor  

• ConMnent/country/state/city  à  module/sub-­‐module/file/funcMon  • DisMncMve  shape  and  posiMons  serve  as  landmarks  • Can  overlay  a  variety  of  informaMon  

Frappé:  a  code  comprehension  tool  for  large  codebases   33  

Page 34: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Overlay  Search  Results  

Visual  filtering   Contextual  search  

Frappé:  a  code  comprehension  tool  for  large  codebases   34  

Page 35: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Overlay  Paths  

Path  in  stack  trace   Path  on  map  

Frappé:  a  code  comprehension  tool  for  large  codebases   35  

java.lang.RuntimeException:  bad      at  Foobar.setup(Foobar.java:74)      at  Foobar.launch(Foobar.java:43)      at  Bar.launch(Bar.java:39)      at  Bar.bar(Bar.java:97)      at  Foo.foo(Foo.java:35)      at  Main.main(Main.java:104)  

Page 36: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Overlay  Metrics  

Fine  granularity   Coarse  granularity  

Frappé:  a  code  comprehension  tool  for  large  codebases   36  

Page 37: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

But  how?  

Frappé:  a  code  comprehension  tool  for  large  codebases   37  

Page 38: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

ExisMng  Approaches  

Deline,  R.  Staying  oriented  with  soOware  terrain  maps  In  proc.  of  the  workshop  of  visual  languages  and  computaMon,  2005  

 

Kuhn,  A.;  Erni,  D.;  Loretan,  P.;  Nierstrasz,  O.  SoOware  cartography:  themaLc  soOware  visualizaLon  with  consistent  layout  Journal  of  Sopware  Maintenance  and  EvoluMon,  2010  

Frappé:  a  code  comprehension  tool  for  large  codebases   38  

Page 39: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Input  • AbstracMon  hierarchy  – Abstracts  files  into  higher  level  groupings  – Use  directory  structure  by  default  

• Dependency  graph  – Represents  dependencies  between  files  as  a  weighted  edge  – Use  references  

Frappé:  a  code  comprehension  tool  for  large  codebases   39  

Page 40: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Map  GeneraMon  

Graph  layout  

Frappé:  a  code  comprehension  tool  for  large  codebases   40  

Implicit  surface  generaMon   Surface  subdivision   Recursive  subdivision  

Page 41: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Map  GeneraMon  

Frappé:  a  code  comprehension  tool  for  large  codebases   41  

Recursive  subdivision  Nocaj,  A.  &  Brandes,  U.  CompuLng  Voronoi  Treemaps:  Faster,  Simpler,  

and  ResoluLon-­‐independent  Computer  Graphics  Forum,  Blackwell  Publishing  Ltd,  2012,  31,  855-­‐864  

 

Graph  layout  Noack,  A.  &  Lewerentz,  C.  A  space  of  layout  styles  for  hierarchical  graph  models  of  soOware  systems  Proceedings  of  the  2005  ACM  symposium  on  Sopware  visualizaMon,  ACM,  2005,  155-­‐164  

 

Implicit  surface  generaMon  

Page 42: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

DemonstraMon  Linux  

Frappé:  a  code  comprehension  tool  for  large  codebases   42  

Page 43: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Future  Work  • More  detailed  dependency  graph  – Find  calls  where  third  argument  is  macro  FLAG  – Find  all  funcMons  the  pointer  fptr  could  point  to  

• More  overlays  – Test  coverage,  profiling  data  

•  Store  mulMple  versions  – Impact  esMmaMon  – Code  map  evoluMon  (stability)  

Frappé:  a  code  comprehension  tool  for  large  codebases   43  

Page 44: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*

Copyright  ©  2014  Oracle  and/or  its  affiliates.  All  rights  reserved.    |  

Nathan  Hawes  and  Ben  Barham  [email protected]  [email protected]    Oracle  Labs  Australia  hsp://labs.oracle.com/locaMons/australia    Research  Director    [email protected]      

Frappé:  a  code  comprehension  tool  for  large  codebases  

44  

Page 45: UsingClangtoVisualizeLarge& Codebases - LLVMllvm.org/devmtg/2014-10/Slides/Hawes-Frappe.pdf · Copyright©*2014*Oracle*and/or*its*affiliates.*All*rights*reserved.**|* Safe*Harbour*