blob: 4bbbc69e6c312502748d9ec4d12b0184ec2f9e91 [file] [log] [blame]
<!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>&gt; cdtdebug.sh -e &lt;binary&gt; [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>