| <!doctype html> |
| <html lang="en"> |
| |
| <head> |
| <meta charset="utf-8"> |
| |
| <title>Eclipse CDT-Debug in Luna, Mars and Beyond</title> |
| |
| <meta name="description" content="Overview of the latest features in CDT"> |
| <meta name="author" content="Alvaro Sanchez-Leon (Ericsson), Marc-André Laperle (Ericsson) and Marc Dumais (Ericsson)"> |
| |
| <meta name="apple-mobile-web-app-capable" content="yes" /> |
| <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> |
| |
| <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> |
| |
| <link rel="stylesheet" href="css/reveal.min.css"> |
| <link rel="stylesheet" href="css/theme/solarized.css" id="theme"> |
| <!-- themes are: beige.css default.css night.css serif.css solarized.css |
| blood.css moon.css simple.css sky.css sky2.css --> |
| |
| <!-- For syntax highlighting --> |
| <link rel="stylesheet" href="lib/css/zenburn.css"> |
| |
| <!-- If the query includes 'print-pdf', include the PDF print sheet --> |
| <script> |
| if( window.location.search.match( /print-pdf/gi ) ) { |
| var link = document.createElement( 'link' ); |
| link.rel = 'stylesheet'; |
| link.type = 'text/css'; |
| link.href = 'css/print/pdf.css'; |
| document.getElementsByTagName( 'head' )[0].appendChild( link ); |
| } |
| </script> |
| |
| <!--[if lt IE 9]> |
| <script src="lib/js/html5shiv.js"></script> |
| <![endif]--> |
| </head> |
| |
| <body> |
| <div style="float: left"> |
| <img hspace="25px" vspace="18px" src="img/ericsson_logo.png"/> |
| </div> |
| <div style="float: left"> |
| <img hspace="25px" vspace="10px" src="img/cdt_logo.png"/> |
| </div> |
| <div style="float: right"> |
| <img hspace="25px" vspace="0px" src="img/Eclipse-Day.png"/> |
| </div> |
| |
| <div class="reveal"> |
| |
| <div class="slides"> |
| |
| <section> |
| <h2>Eclipse CDT-Debug</h2> |
| <h3>in Luna, Mars and Beyond</h3> |
| |
| <p> |
| Alvaro Sanchez-Leon (Ericsson)<p> |
| Marc-André Laperle (Ericsson)<p> |
| Marc Dumais (Ericsson) |
| </p> |
| </section> |
| |
| <section> |
| <h2>Agenda</h2> |
| <ul> |
| <li>What is the CDT?</li> |
| <li>CDT Debug - DSF-GDB Feature highlights</li> |
| <li>Multicore Visualizer</li> |
| <li>Debugging with the stand alone CDT debugger (Use case)</li> |
| <li>Q&A</li> |
| </ul> |
| </section> |
| |
| <!-- |
| What is the CDT? |
| --> |
| <section> |
| <h2>What is the CDT?</h2> |
| <ul> |
| <li>C/C++ Development Tooling (CDT)</li> |
| <li>Tools for building applications in C/C++ using Eclipse</li> |
| <li>Platform used to create C/C++ IDEs</li> |
| <li>The Eclipse C/C++ IDE Package</li> |
| <li>A community of passionate tools developers</li> |
| </ul> |
| </section> |
| |
| <!-- |
| CDT Debug - Feature highlights |
| --> |
| <section> |
| <h2>CDT Debug - DSF-GDB Feature highlights</h2> |
| <img height="675px" src="img/Debug.png" alt="CDT Debug overview"/> |
| </section> |
| <section> |
| <h2>Reverse Debugging</h2> |
| <ul> |
| <li>Step or Resume forwards AND backwards</li> |
| <li>Go back in time, change data and re-write history</li> |
| <li>Use breakpoints to enable/disable recording</li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Reverse Debugging</h2> |
| <img height="600px" src="img/ReverseDebugging.png" alt="Reverse Debugging"/> |
| </section> |
| |
| <section> |
| <h3>Multi-Process Debugging</h3> |
| <img height="600px" src="img/MultiProcess.png" alt="Multi-Process Debugging"/> |
| </section> |
| |
| |
| <section> |
| <h2>Return Values</h2> |
| <img width="1000px" src="img/ReturnValues.png" alt="Display of Return Values"/> |
| <ul> |
| <li>After a Step-Return</li> |
| <li>Top element of Variables view</li> |
| <li>Removed at next execution</li> |
| <li>Plan to generalize for Step-Over</li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Step Into Selection</h2> |
| <pre class="fragment"><code>void compute(int a, float b) { |
| subtract(multiply(add(a, b), 3)); |
| } </code></pre> |
| |
| <h4 class="fragment">How many operations to step into subtract()?</h4> |
| <p class="fragment">Step-into:</p> |
| <pre class="fragment"><code>int add(int arg1, int arg2) { |
| return arg1 + arg2; |
| } </code></pre> |
| |
| <p class="fragment">Return and Step-into again:</p> |
| <pre class="fragment"><code>int multiply(int arg1, int arg2) { |
| return arg1 * arg2; |
| } </code></pre> |
| |
| <p class="fragment">Return and Step-into yet again to finally get to:</p> |
| <pre class="fragment"><code>int subtract(int arg1, int arg2) { |
| return arg1 - arg2; |
| } </code></pre> |
| <h4 class="fragment">Five stepping operations!</h4> |
| </section> |
| |
| <section> |
| <h2>Step Into Selection</h2> |
| <pre><code>void compute(int a, float b) { |
| subtract(multiply(add(a, b), 3)); |
| } </code></pre> |
| <p class="fragment">Select the "subtract" method call in the Editor</p> |
| <p class="fragment">Choose the Step-Into-Selection operation:</p> |
| <pre class="fragment"><code>int subtract(int arg1, int arg2) { |
| return arg1 - arg2; |
| } </code></pre> |
| <p class="fragment">All other method calls are stepped-over automatically</p> |
| <br> |
| <h4 class="fragment">Just one stepping operation!</h4> |
| </section> |
| |
| <section> |
| <h2>Dynamic-Printf</h2> |
| <img style="float:left" width="475px" src="img/DPrintfSelect.png" alt="Dynamic Printf Type"/> |
| <br><br> |
| <ul> |
| <li>No re-compiling</li> |
| <li>No re-deploying</li> |
| <li>Debugger can disconnect</li> |
| </ul> |
| <img width="575px" src="img/DPrintfProperties.png" alt="Dynamic Printf Properties"/> |
| </section> |
| |
| <!-- |
| The Multicore Visualizer |
| --> |
| <section> |
| <h2>The Multicore Visualizer</h2> |
| <h3>The gateway to massive-number-of-cores debugging?</h3> |
| </section> |
| |
| <section> |
| <h2>An Epiphany Introduction</h2> |
| <img width="1000px" src="img/Epiphany1.png" alt="Epiphany Architecture"/> |
| </section> |
| <section> |
| <h2>Massive Parallelism Has Arrived!</h2> |
| <img width="1000px" src="img/Epiphany2.png" alt="Massive Parallelism"/> |
| <ul> |
| <li><em>How in the ^**&#@ are we doing to program AND DEBUG this??</em></li> |
| </ul> |
| </section> |
| <section> |
| <h2>The Parallella board</h2> |
| <img width="1050px" src="img/Epiphany3.png" alt="Parallella computer"/> |
| </section> |
| |
| <section> |
| <h2>Epiphany debug model</h2> |
| <ul> |
| <li>A core running a program is a thread</li> |
| <li>A process is a group of one or more thread(s) running the same program</li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Debugging the Epiphany co-processor</h2> |
| <img height="550px" src="img/ParallellaDebug2.png" alt="Debug of Epiphany chip"/> |
| <ul> |
| <li>Remote Multicore Debug of Epiphany-16</li> |
| <li>Already stretching usability limits of the debug view!</li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Scaling issues</h2> |
| <img style="float:left;margin-left:200px" height="700px" src="img/ParallellaDebugScaling.png" alt="Debug view not scaling"/> |
| <br><br><br><br> |
| <ul> |
| <li>Debug view with 64 cores</li> |
| <li>Unmanageable!</li> |
| <li>Need a better way... Visualization?</li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Generic Multicore Visualizer</h2> |
| <img src="img/MulticoreVisualizerTriplet.png" alt="Generic Multicore Visualizer"/> |
| <ul> |
| <li>Monitor entire system at a glance</li> |
| <li>Control program execution from Visualizer</li> |
| <li>Synchronized with Debug view</li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Generic Multicore Visualizer Layout</h2> |
| <img src="img/MV-layout-examples.png" alt="Generic Multicore Visualizer"/> |
| |
| <ul> |
| <li>"best-fit" layout according to view size and geometry</li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Epiphany Multicore Visualizer Layout</h2> |
| <img style="float:left" width="550px" src="img/Epiphany16Layout.png" alt="Epiphany Visualizer Layout"/> |
| <br><br><br><br> |
| <ul> |
| <li>Actual hardware layout</li> |
| <li>Core IDs</li> |
| <li>Color shows binary loaded</li> |
| <li>Selection of cores</li> |
| <li>Status bar info</li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Program Distribution and Load</h2> |
| <img style="float:left" width="550px" src="img/Epiphany16Load.png" alt="Program Distribution"/> |
| <br><br><br><br> |
| <ul> |
| <li>Layout with network</li> |
| <li>Load per core</li> |
| <li>Load per network link</li> |
| </ul> |
| </section> |
| <section> |
| <h2>64-core Layout</h2> |
| <img width="700px" src="img/Epiphany64Layout.png" alt="Network Load"/> |
| </section> |
| |
| <section> |
| <h2>64-core Load</h2> |
| <img width="700px" src="img/Epiphany64Load.png" alt="Network Load"/> |
| </section> |
| <section> |
| <h2>Debugging thousands of cores</h2> |
| <ul> |
| <li>4096 cores (64x64)</li> |
| </ul> |
| <p> |
| <img width="700px" src="img/Epiphany4096Layout.png" alt="Thousands of cores mockup"/> |
| </section> |
| |
| |
| <section> |
| <h2>Next steps (?)</h2> |
| </section> |
| |
| <section> |
| <h2>Possible enhancements areas</h2> |
| <ul> |
| <li>Zooming / Filtering</li> |
| <li>Use of colors/textures to pin-point an issue</li> |
| <li>Automatic issue detection</li> |
| <li>Visualizer Pin & Clone</li> |
| <br> |
| <li class="fragment" data-fragment-index="2"><em>More study needed, more collaboration</em></li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Visualizer Zooming</h2> |
| <img style="float:left" class="fragment" data-fragment-index="1" height="450px" src="img/Zoom1.png" alt="Before zooming"/> |
| <img style="float:right" class="fragment" data-fragment-index="2" height="450px" src="img/Zoom2.png" alt="After zooming"/> |
| <ul> |
| <li class="fragment" data-fragment-index="1">Select area to zoom-into</li> |
| <li class="fragment" data-fragment-index="1">Get more detailed information about a subset of the system</li> |
| </section> |
| |
| <section> |
| <h2>Pin & Clone</h2> |
| <ul> |
| <li>Support cloning Visualizer views</li> |
| <li>Support pinning a visualizer view to a specific debug session</li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Clone example</h2> |
| <img class="nofragment" width="1050px" src="img/MulticoreVisualizerClone.png" alt="Cloning the Multicore Visualizer"/> |
| <ul> |
| <li class="nofragment">Can use the filtering or zooming feature to show a subset of the information in separate Visualizer views</li> |
| </ul> |
| </section> |
| <section> |
| <h2>Pin to Session example</h2> |
| <img class="nofragment" width="1050px" src="img/DoubleVisualizer.png" alt="Visualizing both chips"/> |
| <ul> |
| <li class="nofragment">The entire Parallella: ARM and Epiphany chips</li> |
| <li class="nofragment">This way we can show two visualizers, eached "hooked" on a different session, at the same time</li> |
| </ul> |
| </section> |
| <!-- |
| Debugging with CDT - a use case Demo |
| --> |
| <section> |
| <h2>Debugging with the stand alone CDT debugger (Use case)</h2> |
| </section> |
| |
| <section> |
| <h2>Standalone CDT Debugger</h2> |
| <pre><code>> cdtdebug.sh -e <binary> [arg1 ... argn]</code></pre> |
| <img width="900px" src="img/StandaloneDebugger.png" alt="Standalone Debugger"/> |
| </section> |
| |
| <section> |
| <h2>Standalone CDT Debugger</h2> |
| <ul> |
| <li class="fragment" data-fragment-index="1">Uses an existing installation</li> |
| <li class="fragment" data-fragment-index="1">Installs a launch script in your home for convenience</li> |
| <li class="fragment" data-fragment-index="1">Launches with a subset of the plugins (custom config.ini)</li> |
| <li class="fragment" data-fragment-index="2">Several ways of launching:</li> |
| <ul> |
| <li class="fragment" data-fragment-index="2">Run executable: -e</li> |
| <li class="fragment" data-fragment-index="2">Attach: -a</li> |
| <li class="fragment" data-fragment-index="2">Postmortem (Coredump): -c</li> |
| </ul> |
| <li class="fragment" data-fragment-index="3">Thanks to Jeff Johnston at Red Hat for this feature!</li> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Standalone CDT Debugger</h2> |
| <h3>Potential use cases</h3> |
| <ul> |
| <li class="fragment" data-fragment-index="3">Quick launching from the command-line</li> |
| <li class="fragment" data-fragment-index="3">Integrate with other shell scripts</li> |
| <li class="fragment" data-fragment-index="3">Integrate with crash handlers?</li> |
| <ul> |
| <li class="fragment" data-fragment-index="4">Let's see if that's possible!</li> |
| </ul> |
| </ul> |
| </section> |
| <!-- |
| Q & A |
| --> |
| <section> |
| <h2>Q & A</h2> |
| </section> |
| |
| <!-- |
| If time allows |
| --> |
| <section> |
| <h2>Features of current interest</h2> |
| <ul> |
| <li class="nofragment">Debugging Parallela with CDT</li> |
| <li class="nofragment">Register Grouping</li> |
| <li class="nofragment">New Launch UI</li> |
| <li class="nofragment">Global Breakpoints</li> |
| <li class="nofragment">Grouping of Debug view elements</li> |
| <li class="nofragment">Hiding of debug view elements</li> |
| <li class="nofragment">Synchronized Run Control Operations</li> |
| <li class="nofragment">Per-target Breakpoints</li> |
| |
| </ul> |
| </section> |
| |
| |
| <section> |
| <h2>Resources</h2> |
| <ul> |
| <a href="https://wiki.eclipse.org/CDT/User/NewIn83#Debug">CDT 8.3 Debug New & Noteworthy</a><br> |
| <a href="https://wiki.eclipse.org/CDT/User/NewIn84#Debug">CDT 8.4 Debug New & Noteworthy</a><br> |
| <a href="https://wiki.eclipse.org/CDT/User/FAQ#Debugging_C.2FC.2B.2B_Projects">CDT Debug FAQ</a><br> |
| <a href="https://wiki.eclipse.org/CDT/StandaloneDebugger">CDT Standalone Debugger</a><br> |
| <a href="https://wiki.eclipse.org/CDT/MultiCoreDebugWorkingGroup">Multicore Debug Workgroup</a><br> |
| <a href="https://www.parallella.org/">Parallella</a><br> |
| <a href="https://www.adapteva.com/">Adapteva</a><br> |
| <a href="https://www.ericsson.com/article/open_source_1714451213_c">Ericsson Open-Source</a><br> |
| </ul> |
| </section> |
| |
| <section> |
| <h2>Themes</h2> |
| <p> |
| Use the below links to change themes <br> |
| <a href="?#/themes">Default</a> - |
| <a href="?theme=sky#/themes">Sky</a> - |
| <a href="?theme=sky2#/themes">Sky2</a> - |
| <a href="?theme=blood#/themes">Blood</a> - |
| <a href="?theme=beige#/themes">Beige</a> - |
| <a href="?theme=simple#/themes">Simple</a> - |
| <a href="?theme=serif#/themes">Serif</a> - |
| <a href="?theme=night#/themes">Night</a> - |
| <a href="?theme=moon#/themes">Moon</a> - |
| <a href="?theme=solarized#/themes">Solarized</a> |
| </p> |
| </section> |
| </div> |
| |
| </div> |
| |
| <script src="lib/js/head.min.js"></script> |
| <script src="js/reveal.min.js"></script> |
| |
| <script> |
| |
| // Full list of configuration options available here: |
| // https://github.com/hakimel/reveal.js#configuration |
| Reveal.initialize({ |
| controls: true, |
| progress: true, |
| history: true, |
| center: true, |
| slideNumber: true, |
| |
| theme: Reveal.getQueryHash().theme, // available themes are in /css/theme |
| transition: Reveal.getQueryHash().transition || 'default', // default/cube/page/concave/zoom/linear/fade/none |
| |
| // Optional libraries used to extend on reveal.js |
| dependencies: [ |
| { src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } }, |
| { src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, |
| { src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, |
| { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, |
| { src: 'plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } }, |
| { src: 'plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } } |
| ] |
| }); |
| |
| </script> |
| |
| </body> |
| </html> |