blob: 39afb460326be98c4311ff727db49ea376e31428 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>Tutorial demo</title>
<link type="text/css" rel="stylesheet" href="../../css/build/kalamar.css" />
<script src="../src/session.js"></script>
<script src="../src/tutorial.js"></script>
</head>
<body class="embedded">
<div id="sidebar" tabindex="0" class="active">
<div>
<!-- Not embedded:
<h2>Tutorial</h2>
-->
<nav>
<ul>
<li><a href="/doc/korap">KorAP</a>
<ul>
<li><a href="/doc/kalamar" class="active">Kalamar</a></li>
<li><a href="/doc/koral">Koral</a></li>
<li><a href="/doc/kustvakt">Kustvakt</a></li>
<li><a href="/doc/krill">Krill</a></li>
<!-- <li>Karang</li> -->
</ul>
</li>
<li><a href="/doc/ql">Query Languages</a>
<ul>
<li><a href="/doc/ql/cosmas-2">Cosmas II</a></li>
<li><a href="/doc/ql/poliqarp-plus">Poliqarp+</a></li>
<li><a href="/doc/ql/annis">Annis QL</a></li>
<li><a href="/doc/ql/cql">CQL</a></li>
<li><a href="/doc/ql/regexp">RegExp</a></li>
</ul>
</li>
<li><a href="/doc/data">Data</a>
<ul>
<li><a href="/doc/data/corpus">Corpora</a>
<ul>
<li><a href="/doc/data/corpus/dereko">DeReKo</a></li>
</ul>
</li>
<li><a href="/doc/data/annotation">Annotations</a>
<ul>
<li><a href="/doc/data/annotation/connexor">Connexor</a></li>
<li><a href="/doc/data/annotation/mate">Mate</a></li>
<li><a href="/doc/data/annotation/treetagger">TreeTagger</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="/doc/api">API</a>
<!--
<ul>
<li><a href="/doc/api/koralquery">KoralQuery</a></li>
<li><a href="/doc/api/search">Search API</a></li>
<li><a href="/doc/api/match">Match Information API</a></li>
<li><a href="/doc/api/user">User API</a></li>
</ul>
-->
</li>
</ul>
</nav>
</div>
</div>
<main class="tutorial">
<h2>KorAP-Tutorial</h2>
<section id="tut-intro">
<h3>Frontend Features</h3>
<p>This frontend ...</p>
</section>
<section id="tut-examples">
<h3>Example Queries</h3>
<p><strong>Poliqarp</strong>: Find all occurrences of the lemma &quot;baum&quot; as annotated by the <a href="#">default foundry</a>.</p>
<pre class="query tutorial" data-query="[base=Baum]" data-query-language="poliqarp"><code>[base=Baum]</code></pre>
</section>
<section id="tut-caveats">
<h3>Caveats</h3>
<p>Memcheck is not perfect; it occasionally produces false positives, and there are mechanisms for suppressing these (see Suppressing errors in the Valgrind User Manual). However, it is typically right 99% of the time, so you should be wary of ignoring its error messages. After all, you wouldn’t ignore warning messages produced by a compiler, right?</p>
<p>The suppression mechanism is also useful if Memcheck is reporting errors in library code that you cannot change. The default suppression set hides a lot of these, but you may come across more. Memcheck cannot detect every memory error your program has. For example, it can’t detect out-of-range reads or writes to arrays that are allocated statically or on the stack. But it should detect many errors that could crash your program (eg. cause a segmentation fault).</p>
<p>Try to make your program so clean that Memcheck reports no errors. Once you achieve this state, it is much easier to see when changes to the program cause Memcheck to report new errors. Experience from several years of Memcheck use shows that it is possible to make even huge programs run Memcheck-clean. For example, large parts of KDE, OpenOffice.org and Firefox are Memcheck-clean, or very close to it.</p>
</section>
<section id="tut-more-information">
<h3>More information</h3>
<p>Please consult the Valgrind FAQ and the Valgrind User Manual, which have much more information. Note that the other tools in the Valgrind distribution can be invoked with the <code>--tool</code> option.</p>
</section>
<section id="tut-overview">
<h3>An Overview of Valgrind</h3>
<p>Valgrind is an instrumentation framework for building dynamic analysis tools. It comes with a set of tools each of which performs some kind of debugging, profiling, or similar task that helps you improve your programs. Valgrind’s architecture is modular, so new tools can be created easily and without disturbing the existing structure.</p>
<p>A number of useful tools are supplied as standard.</p>
<ol>
<li><strong>Memcheck</strong> is a memory error detector. It helps you make your programs, particularly those written in C and C++, more correct.</li>
<li><strong>Cachegrind</strong> is a cache and branch-prediction profiler. It helps you make your programs run faster.</li>
<li><strong>Callgrind</strong> is a call-graph generating cache profiler. It has some overlap with Cachegrind, but also gathers some information that Cachegrind does not.</li>
<li><strong>Helgrind</strong> is a thread error detector. It helps you make your multi-threaded programs more correct.</li>
<li><strong>DRD</strong> is also a thread error detector. It is similar to Helgrind but uses different analysis techniques and so may find different problems.</li>
<li><strong>Massif</strong> is a heap profiler. It helps you make your programs use less memory.</li>
<li><strong>DHAT</strong> is a different kind of heap profiler. It helps you understand issues of block lifetimes, block utilisation, and layout inefficiencies.</li>
<li><strong>SGcheck</strong> is an experimental tool that can detect overruns of stack and global arrays. Its functionality is complementary to that of Memcheck: SGcheck finds problems that Memcheck can’t, and vice versa.</li>
<li><strong>BBV</strong> is an experimental SimPoint basic block vector generator. It is useful to people doing computer architecture research and development.</li>
</ol>
<p>There are also a couple of minor tools that aren’t useful to most users: Lackey is an example tool that illustrates some instrumentation basics; and Nulgrind is the minimal Valgrind tool that does no analysis or instrumentation, and is only useful for testing purposes. Valgrind is closely tied to details of the CPU and operating system, and to a lesser extent, the compiler and basic C libraries. Nonetheless, it supports a number of widely-used platforms, listed in full at <a href="http://www.valgrind.org/">valgrind.org</a>.</p>
<p>Valgrind is built via the standard Unix ./configure, make, make install process; full details are given in the README file in the distribution.</p>
</section>
</main>
</body>
</html>