blob: 78ffd015225123286056927bb51cff4bc18ade86 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>gdbserver &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css" />
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<script src="../_static/jquery.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/clipboard.min.js"></script>
<script src="../_static/copybutton.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="GDB with Python" href="gdbwithpython.html" />
<link rel="prev" title="Coresight - HW Assisted Tracing on ARM" href="coresight.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../latest" selected="selected">latest</option>
<option value="../../10.0.0" >10.0.0</option>
<option value="../../10.0.1" >10.0.1</option>
<option value="../../10.1.0" >10.1.0</option>
<option value="../../10.2.0" >10.2.0</option>
<option value="../../10.3.0" >10.3.0</option>
<option value="../../11.0.0" >11.0.0</option>
<option value="../../12.0.0" >12.0.0</option>
<option value="../../12.1.0" >12.1.0</option>
<option value="../../12.2.0" >12.2.0</option>
<option value="../../12.2.1" >12.2.1</option>
<option value="../../12.3.0" >12.3.0</option>
<option value="../../12.4.0" >12.4.0</option>
<option value="../../12.5.0" >12.5.0</option>
<option value="../../12.5.1" >12.5.1</option>
<option value="../../12.6.0" >12.6.0</option>
<option value="../../12.7.0" >12.7.0</option>
<option value="../../12.8.0" >12.8.0</option>
<option value="../../12.9.0" >12.9.0</option>
<option value="../../12.10.0" >12.10.0</option>
<option value="../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1"><a class="reference internal" href="../components/index.html">OS Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">FAQ</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Guides</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="nfs.html">NFS Client How-To</a></li>
<li class="toctree-l2"><a class="reference internal" href="usbtrace.html">USB Device Trace</a></li>
<li class="toctree-l2"><a class="reference internal" href="simulator.html">Simulator</a></li>
<li class="toctree-l2"><a class="reference internal" href="qemugdb.html">How to debug NuttX using QEMU and GDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="rndis.html">How to use RNDIS</a></li>
<li class="toctree-l2"><a class="reference internal" href="drivers.html">Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="tasktrace.html">Task Trace</a></li>
<li class="toctree-l2"><a class="reference internal" href="cpp_cmake.html">C++ Example using CMake</a></li>
<li class="toctree-l2"><a class="reference internal" href="pysimcoder.html">pysimCoder integration with NuttX</a></li>
<li class="toctree-l2"><a class="reference internal" href="customboards.html">Custom Boards How-To</a></li>
<li class="toctree-l2"><a class="reference internal" href="customapps.html">Custom Apps How-to</a></li>
<li class="toctree-l2"><a class="reference internal" href="citests.html">Running CI Test Locally</a></li>
<li class="toctree-l2"><a class="reference internal" href="zerolatencyinterrupts.html">High Performance: Zero Latency Interrupts, Maskable nested interrupts</a></li>
<li class="toctree-l2"><a class="reference internal" href="kasan.html">The Kernel Address Sanitizer (KASAN)</a></li>
<li class="toctree-l2"><a class="reference internal" href="nestedinterrupts.html">Nested Interrupts</a></li>
<li class="toctree-l2"><a class="reference internal" href="cortexmhardfaults.html">Analyzing Cortex-M Hardfaults</a></li>
<li class="toctree-l2"><a class="reference internal" href="coredump.html">Core Dump</a></li>
<li class="toctree-l2"><a class="reference internal" href="coresight.html">Coresight - HW Assisted Tracing on ARM</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">gdbserver</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#introduction">Introduction</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usage">Usage</a></li>
<li class="toctree-l3"><a class="reference internal" href="#log-example">Log Example</a></li>
<li class="toctree-l3"><a class="reference internal" href="#raw-file-example">Raw file Example</a></li>
<li class="toctree-l3"><a class="reference internal" href="#coredump-example">Coredump Example</a></li>
<li class="toctree-l3"><a class="reference internal" href="#thread-awarenes">Thread awarenes</a></li>
<li class="toctree-l3"><a class="reference internal" href="#how-to-add-new-architecture">How to add new architecture</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="gdbwithpython.html">GDB with Python</a></li>
<li class="toctree-l2"><a class="reference internal" href="ofloader.html">Open Flash Loader</a></li>
<li class="toctree-l2"><a class="reference internal" href="testingtcpip.html">Testing TCP/IP Network Stacks</a></li>
<li class="toctree-l2"><a class="reference internal" href="automounter.html">Auto-Mounter</a></li>
<li class="toctree-l2"><a class="reference internal" href="stm32nullpointer.html">STM32 Null Pointer Detection</a></li>
<li class="toctree-l2"><a class="reference internal" href="stm32ccm.html">STM32 CCM Allocator</a></li>
<li class="toctree-l2"><a class="reference internal" href="stackrecord.html">Run time stack statistics</a></li>
<li class="toctree-l2"><a class="reference internal" href="etcromfs.html">etc romfs</a></li>
<li class="toctree-l2"><a class="reference internal" href="thread_local_storage.html">Thread Local Storage</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../logos/index.html">NuttX Logos</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">Guides</a></li>
<li class="breadcrumb-item active">gdbserver</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/guides/gdbserver.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="gdbserver">
<h1>gdbserver<a class="headerlink" href="#gdbserver" title="Permalink to this heading"></a></h1>
<section id="introduction">
<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this heading"></a></h2>
<p>This tool can utilize a crash log on a PC to simulate a set of GDB server functionalities,
enabling the use of GDB to debug the context of a NuttX crash.
The script directory is located in <code class="docutils literal notranslate"><span class="pre">tools/gdbserver.py</span></code>.</p>
</section>
<section id="usage">
<h2>Usage<a class="headerlink" href="#usage" title="Permalink to this heading"></a></h2>
<p>We can use <code class="docutils literal notranslate"><span class="pre">-h</span></code> to get help information:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>usage:<span class="w"> </span>gdbserver.py<span class="w"> </span><span class="o">[</span>-h<span class="o">]</span><span class="w"> </span>-e<span class="w"> </span>ELFFILE<span class="w"> </span><span class="o">[</span>-l<span class="w"> </span>LOGFILE<span class="o">]</span><span class="w"> </span><span class="o">[</span>-a<span class="w"> </span><span class="o">{</span>arm,arm-a,arm-t,riscv,esp32s3,xtensa<span class="o">}]</span><span class="w"> </span><span class="o">[</span>-p<span class="w"> </span>PORT<span class="o">]</span><span class="w"> </span><span class="o">[</span>-g<span class="w"> </span>GDB<span class="o">]</span><span class="w"> </span><span class="o">[</span>-i<span class="w"> </span><span class="o">[</span>INIT_CMD<span class="o">]]</span>
<span class="w"> </span><span class="o">[</span>-r<span class="w"> </span><span class="o">[</span>RAWFILE<span class="w"> </span>...<span class="o">]]</span><span class="w"> </span><span class="o">[</span>-c<span class="w"> </span><span class="o">[</span>COREDUMP<span class="o">]]</span><span class="w"> </span><span class="o">[</span>--debug<span class="o">]</span>
<span class="w"> </span>options:
<span class="w"> </span>-h,<span class="w"> </span>--help<span class="w"> </span>show<span class="w"> </span>this<span class="w"> </span><span class="nb">help</span><span class="w"> </span>message<span class="w"> </span>and<span class="w"> </span><span class="nb">exit</span>
<span class="w"> </span>-e<span class="w"> </span>ELFFILE,<span class="w"> </span>--elffile<span class="w"> </span>ELFFILE
<span class="w"> </span>elffile
<span class="w"> </span>-l<span class="w"> </span>LOGFILE,<span class="w"> </span>--logfile<span class="w"> </span>LOGFILE
<span class="w"> </span>logfile
<span class="w"> </span>-a<span class="w"> </span><span class="o">{</span>arm,arm-a,arm-t,riscv,esp32s3,xtensa<span class="o">}</span>,<span class="w"> </span>--arch<span class="w"> </span><span class="o">{</span>arm,arm-a,arm-t,riscv,esp32s3,xtensa<span class="o">}</span>
<span class="w"> </span>Only<span class="w"> </span>use<span class="w"> </span><span class="k">if</span><span class="w"> </span>can<span class="s1">&#39;t be learnt from ELFFILE.</span>
<span class="s1"> -p PORT, --port PORT gdbport</span>
<span class="s1"> -g GDB, --gdb GDB provided a custom GDB path, automatically start GDB session and exit gdbserver when exit GDB.</span>
<span class="s1"> -i [INIT_CMD], --init-cmd [INIT_CMD]</span>
<span class="s1"> provided a custom GDB init command, automatically start GDB sessions and input what you provide. if you don&#39;</span>t
<span class="w"> </span>provide<span class="w"> </span>any<span class="w"> </span>command,<span class="w"> </span>it<span class="w"> </span>will<span class="w"> </span>use<span class="w"> </span>default<span class="w"> </span><span class="nb">command</span><span class="w"> </span><span class="o">[</span>-ex<span class="w"> </span><span class="s1">&#39;bt full&#39;</span><span class="w"> </span>-ex<span class="w"> </span><span class="s1">&#39;info reg&#39;</span><span class="w"> </span>-ex<span class="w"> </span><span class="s1">&#39;display /40i $pc-40&#39;</span><span class="o">]</span>.
<span class="w"> </span>-r<span class="w"> </span><span class="o">[</span>RAWFILE<span class="w"> </span>...<span class="o">]</span>,<span class="w"> </span>--rawfile<span class="w"> </span><span class="o">[</span>RAWFILE<span class="w"> </span>...<span class="o">]</span>
<span class="w"> </span>rawfile<span class="w"> </span>is<span class="w"> </span>a<span class="w"> </span>binary<span class="w"> </span>file,<span class="w"> </span>args<span class="w"> </span>format<span class="w"> </span>like<span class="w"> </span>ram.bin:0x10000<span class="w"> </span>...
<span class="w"> </span>-c<span class="w"> </span><span class="o">[</span>COREDUMP<span class="o">]</span>,<span class="w"> </span>--coredump<span class="w"> </span><span class="o">[</span>COREDUMP<span class="o">]</span>
<span class="w"> </span>coredump<span class="w"> </span>file,<span class="w"> </span>will<span class="w"> </span>prase<span class="w"> </span>memory<span class="w"> </span><span class="k">in</span><span class="w"> </span>this<span class="w"> </span>file
<span class="w"> </span>--debug<span class="w"> </span><span class="k">if</span><span class="w"> </span>enabled,<span class="w"> </span>it<span class="w"> </span>will<span class="w"> </span>show<span class="w"> </span>more<span class="w"> </span>logs.
</pre></div>
</div>
</section>
<section id="log-example">
<h2>Log Example<a class="headerlink" href="#log-example" title="Permalink to this heading"></a></h2>
<ol class="arabic simple">
<li><p>Use ./tools/configure.sh esp32s3-devkit:nsh and disable <cite>CONFIG_NSH_DISABLE_MW</cite>.</p></li>
<li><p><cite>make -j</cite></p></li>
<li><p>Flash image to esp32s3-devkit.</p></li>
<li><p>Run <cite>minicom -D /dev/ttyUSB0 -b 115200</cite> and reset esp32s3-devkit.</p></li>
<li><p>Use <cite>mw -1</cite> on nsh to trigger a crash.</p></li>
<li><p>Get the crash log from minicom and save it to <cite>crash.log</cite>.</p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>up_dump_register:<span class="w"> </span>PC:<span class="w"> </span>42009cd8<span class="w"> </span>PS:<span class="w"> </span><span class="m">00060820</span>
up_dump_register:<span class="w"> </span>A0:<span class="w"> </span>82007d71<span class="w"> </span>A1:<span class="w"> </span>3fc8b6d0<span class="w"> </span>A2:<span class="w"> </span>3fc8b8e0<span class="w"> </span>A3:<span class="w"> </span><span class="m">00000000</span>
up_dump_register:<span class="w"> </span>A4:<span class="w"> </span>ffffffff<span class="w"> </span>A5:<span class="w"> </span><span class="m">00000000</span><span class="w"> </span>A6:<span class="w"> </span><span class="m">00000001</span><span class="w"> </span>A7:<span class="w"> </span><span class="m">00000000</span>
up_dump_register:<span class="w"> </span>A8:<span class="w"> </span>ffffffff<span class="w"> </span>A9:<span class="w"> </span>3fc8b690<span class="w"> </span>A10:<span class="w"> </span>ffffffff<span class="w"> </span>A11:<span class="w"> </span><span class="m">00000000</span>
up_dump_register:<span class="w"> </span>A12:<span class="w"> </span>0000002d<span class="w"> </span>A13:<span class="w"> </span>0000002d<span class="w"> </span>A14:<span class="w"> </span>3fc8bb6d<span class="w"> </span>A15:<span class="w"> </span>0fffffff
up_dump_register:<span class="w"> </span>SAR:<span class="w"> </span><span class="m">00000000</span><span class="w"> </span>CAUSE:<span class="w"> </span>0000001c<span class="w"> </span>VADDR:<span class="w"> </span>ffffffff
up_dump_register:<span class="w"> </span>LBEG:<span class="w"> </span><span class="m">40055499</span><span class="w"> </span>LEND:<span class="w"> </span>400554a9<span class="w"> </span>LCNT:<span class="w"> </span>fffffffc
dump_stack:<span class="w"> </span>User<span class="w"> </span>Stack:
dump_stack:<span class="w"> </span>base:<span class="w"> </span>0x3fc8b0e0
dump_stack:<span class="w"> </span>size:<span class="w"> </span><span class="m">00002000</span>
dump_stack:<span class="w"> </span>sp:<span class="w"> </span>0x3fc8b6d0
stack_dump:<span class="w"> </span>0x3fc8b6c0:<span class="w"> </span><span class="m">82007770</span><span class="w"> </span>3fc8b700<span class="w"> </span>3fc8b8e0<span class="w"> </span><span class="m">00000002</span><span class="w"> </span>ffffffff<span class="w"> </span>3fc89f54<span class="w"> </span>00060e20<span class="w"> </span><span class="m">00000000</span>
stack_dump:<span class="w"> </span>0x3fc8b6e0:<span class="w"> </span>3fc8b8e0<span class="w"> </span>3fc8b778<span class="w"> </span><span class="m">00000000</span><span class="w"> </span>3fc8b750<span class="w"> </span><span class="m">82007850</span><span class="w"> </span>3fc8b720<span class="w"> </span>3fc8b8e0<span class="w"> </span><span class="m">00000002</span>
stack_dump:<span class="w"> </span>0x3fc8b700:<span class="w"> </span>3fc8b720<span class="w"> </span>42009c84<span class="w"> </span>3fc8bb68<span class="w"> </span>3fc8b8e0<span class="w"> </span>82006b04<span class="w"> </span>3fc8b7d0<span class="w"> </span>3fc8b8e0<span class="w"> </span>3fc8bb68
stack_dump:<span class="w"> </span>0x3fc8b720:<span class="w"> </span>3fc8bb68<span class="w"> </span>3fc8bb6b<span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span>
stack_dump:<span class="w"> </span>0x3fc8b740:<span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span>
stack_dump:<span class="w"> </span>0x3fc8b760:<span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span>3fc8bb69
stack_dump:<span class="w"> </span>0x3fc8b780:<span class="w"> </span>82006ad5<span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000040</span><span class="w"> </span><span class="m">00000040</span><span class="w"> </span>3fc8bb6e<span class="w"> </span>3fc8adf8<span class="w"> </span>0000002c
stack_dump:<span class="w"> </span>0x3fc8b7a0:<span class="w"> </span>ffffffff<span class="w"> </span><span class="m">00000005</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span>3fc8bae0<span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span>
stack_dump:<span class="w"> </span>0x3fc8b7c0:<span class="w"> </span>820068a2<span class="w"> </span>3fc8b800<span class="w"> </span>3fc8b8e0<span class="w"> </span>3c020837<span class="w"> </span><span class="m">00000001</span><span class="w"> </span>3fc8b800<span class="w"> </span>3fc8b8e0<span class="w"> </span>3c020837
stack_dump:<span class="w"> </span>0x3fc8b7e0:<span class="w"> </span>0000000a<span class="w"> </span>3fc8bae0<span class="w"> </span><span class="m">00000001</span><span class="w"> </span>3fc8bb68<span class="w"> </span><span class="m">82006865</span><span class="w"> </span>3fc8b820<span class="w"> </span><span class="m">00000001</span><span class="w"> </span>3fc8b0c0
stack_dump:<span class="w"> </span>0x3fc8b800:<span class="w"> </span><span class="m">00000001</span><span class="w"> </span>3fc8bb68<span class="w"> </span><span class="m">00000000</span><span class="w"> </span>3fc8ae1c<span class="w"> </span><span class="m">82003618</span><span class="w"> </span>3fc8b840<span class="w"> </span><span class="m">00000001</span><span class="w"> </span>3fc8b0c0
stack_dump:<span class="w"> </span>0x3fc8b820:<span class="w"> </span>3fc8b8e0<span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span>820019dc<span class="w"> </span>3fc8b870<span class="w"> </span><span class="m">42006834</span><span class="w"> </span><span class="m">00000001</span>
stack_dump:<span class="w"> </span>0x3fc8b840:<span class="w"> </span><span class="m">00000064</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span>3c0225d8<span class="w"> </span>3fc89590<span class="w"> </span><span class="m">00000000</span><span class="w"> </span>3fc880cc
stack_dump:<span class="w"> </span>0x3fc8b860:<span class="w"> </span><span class="m">00000000</span><span class="w"> </span>3fc8b890<span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span>3fc8b0c0<span class="w"> </span><span class="m">00000002</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span>3fc8ad98
stack_dump:<span class="w"> </span>0x3fc8b880:<span class="w"> </span><span class="m">00000000</span><span class="w"> </span>3fc8b8b0<span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span><span class="w"> </span><span class="m">00000000</span>
</pre></div>
</div>
<ol class="arabic simple" start="7">
<li><p>Run <cite>./tools/gdbserver.py -e nuttx -l crash.log -p 1234 -a esp32s3</cite></p></li>
<li><p>Run <cite>xtensa-esp32s3-elf-gdb nuttx -ex “target remote 127.0.0.1:1234”</cite></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>GNU<span class="w"> </span>gdb<span class="w"> </span><span class="o">(</span>esp-gdb<span class="o">)</span><span class="w"> </span><span class="m">12</span>.1_20221002
Copyright<span class="w"> </span><span class="o">(</span>C<span class="o">)</span><span class="w"> </span><span class="m">2022</span><span class="w"> </span>Free<span class="w"> </span>Software<span class="w"> </span>Foundation,<span class="w"> </span>Inc.
License<span class="w"> </span>GPLv3+:<span class="w"> </span>GNU<span class="w"> </span>GPL<span class="w"> </span>version<span class="w"> </span><span class="m">3</span><span class="w"> </span>or<span class="w"> </span>later<span class="w"> </span>&lt;http://gnu.org/licenses/gpl.html&gt;
This<span class="w"> </span>is<span class="w"> </span>free<span class="w"> </span>software:<span class="w"> </span>you<span class="w"> </span>are<span class="w"> </span>free<span class="w"> </span>to<span class="w"> </span>change<span class="w"> </span>and<span class="w"> </span>redistribute<span class="w"> </span>it.
There<span class="w"> </span>is<span class="w"> </span>NO<span class="w"> </span>WARRANTY,<span class="w"> </span>to<span class="w"> </span>the<span class="w"> </span>extent<span class="w"> </span>permitted<span class="w"> </span>by<span class="w"> </span>law.
Type<span class="w"> </span><span class="s2">&quot;show copying&quot;</span><span class="w"> </span>and<span class="w"> </span><span class="s2">&quot;show warranty&quot;</span><span class="w"> </span><span class="k">for</span><span class="w"> </span>details.
This<span class="w"> </span>GDB<span class="w"> </span>was<span class="w"> </span>configured<span class="w"> </span>as<span class="w"> </span><span class="s2">&quot;--host=x86_64-linux-gnu --target=xtensa-esp-elf&quot;</span>.
Type<span class="w"> </span><span class="s2">&quot;show configuration&quot;</span><span class="w"> </span><span class="k">for</span><span class="w"> </span>configuration<span class="w"> </span>details.
For<span class="w"> </span>bug<span class="w"> </span>reporting<span class="w"> </span>instructions,<span class="w"> </span>please<span class="w"> </span>see:
&lt;https://www.gnu.org/software/gdb/bugs/&gt;.
Find<span class="w"> </span>the<span class="w"> </span>GDB<span class="w"> </span>manual<span class="w"> </span>and<span class="w"> </span>other<span class="w"> </span>documentation<span class="w"> </span>resources<span class="w"> </span>online<span class="w"> </span>at:
<span class="w"> </span>&lt;http://www.gnu.org/software/gdb/documentation/&gt;.
For<span class="w"> </span>help,<span class="w"> </span><span class="nb">type</span><span class="w"> </span><span class="s2">&quot;help&quot;</span>.
Type<span class="w"> </span><span class="s2">&quot;apropos word&quot;</span><span class="w"> </span>to<span class="w"> </span>search<span class="w"> </span><span class="k">for</span><span class="w"> </span>commands<span class="w"> </span>related<span class="w"> </span>to<span class="w"> </span><span class="s2">&quot;word&quot;</span>...
Reading<span class="w"> </span>symbols<span class="w"> </span>from<span class="w"> </span>nuttx...
Remote<span class="w"> </span>debugging<span class="w"> </span>using<span class="w"> </span><span class="m">127</span>.0.0.1:1234
0x42009cd8<span class="w"> </span><span class="k">in</span><span class="w"> </span>cmd_mw<span class="w"> </span><span class="o">(</span><span class="nv">vtbl</span><span class="o">=</span>0x3fc8b8e0,<span class="w"> </span><span class="nv">argc</span><span class="o">=</span>&lt;optimized<span class="w"> </span>out&gt;,<span class="w"> </span><span class="nv">argv</span><span class="o">=</span>&lt;optimized<span class="w"> </span>out&gt;<span class="o">)</span><span class="w"> </span>at<span class="w"> </span>nsh_dbgcmds.c:259
<span class="m">259</span><span class="w"> </span>nsh_output<span class="o">(</span>vtbl,<span class="w"> </span><span class="s2">&quot; %p = 0x%08&quot;</span><span class="w"> </span>PRIx32,<span class="w"> </span>ptr,<span class="w"> </span>*ptr<span class="o">)</span><span class="p">;</span>
<span class="o">(</span>gdb<span class="o">)</span><span class="w"> </span>bt
<span class="c1">#0 0x42009cd8 in cmd_mw (vtbl=0x3fc8b8e0, argc=&lt;optimized out&gt;, argv=&lt;optimized out&gt;) at nsh_dbgcmds.c:259</span>
<span class="c1">#1 0x42007d71 in nsh_command (vtbl=0x3fc8b8e0, argc=2, argv=0x3fc8b720) at nsh_command.c:1154</span>
<span class="c1">#2 0x42007770 in nsh_execute (oflags=&lt;optimized out&gt;, redirfile=0x0, argv=0x3fc8b720, argc=2, vtbl=0x3fc8b8e0)</span>
<span class="w"> </span>at<span class="w"> </span>nsh_parse.c:845
<span class="c1">#3 nsh_parse_command (vtbl=0x3fc8b8e0, cmdline=&lt;optimized out&gt;) at nsh_parse.c:2744</span>
<span class="c1">#4 0x42007850 in nsh_parse (vtbl=0x3fc8b8e0,</span>
<span class="w"> </span><span class="nv">cmdline</span><span class="o">=</span>0x3fc8bb68<span class="w"> </span>&lt;error:<span class="w"> </span>Cannot<span class="w"> </span>access<span class="w"> </span>memory<span class="w"> </span>at<span class="w"> </span>address<span class="w"> </span>0x3fc8bb68&gt;<span class="o">)</span><span class="w"> </span>at<span class="w"> </span>nsh_parse.c:2828
<span class="c1">#5 0x42006b04 in nsh_session (pstate=0x3fc8b8e0, login=&lt;optimized out&gt;, argc=1, argv=&lt;optimized out&gt;)</span>
<span class="w"> </span>at<span class="w"> </span>nsh_session.c:245
<span class="c1">#6 0x420068a2 in nsh_consolemain (argc=1, argv=0x3fc8b0c0) at nsh_consolemain.c:71</span>
<span class="c1">#7 0x42006865 in nsh_main (argc=1, argv=0x3fc8b0c0) at nsh_main.c:74</span>
<span class="c1">#8 0x42003618 in nxtask_startup (entrypt=0x42006834 &lt;nsh_main&gt;, argc=1, argv=0x3fc8b0c0)</span>
<span class="w"> </span>at<span class="w"> </span>sched/task_startup.c:70
<span class="c1">#9 0x420019dc in nxtask_start () at task/task_start.c:134</span>
<span class="o">(</span>gdb<span class="o">)</span>
</pre></div>
</div>
</section>
<section id="raw-file-example">
<h2>Raw file Example<a class="headerlink" href="#raw-file-example" title="Permalink to this heading"></a></h2>
<ol class="arabic simple">
<li><p>If you obtain the memory file from your board, you can also use gdbserver.py to reconstruct the scene.
The most common way to get the raw file is to use the dump memory command
in GDB to dump the memory and save it as a file.</p></li>
<li><p>Run <cite>./tools/gdbserver.py -e nuttx -r rawfile:0x1000 -a arm</cite></p></li>
<li><p>Run gdb with target remote.</p></li>
</ol>
</section>
<section id="coredump-example">
<h2>Coredump Example<a class="headerlink" href="#coredump-example" title="Permalink to this heading"></a></h2>
<ol class="arabic simple">
<li><p>If you have a coredump, you also can run <cite>./tools/gdbserver.py -e nuttx -c coredump -a arm</cite></p></li>
<li><p>Run gdb with target remote.</p></li>
</ol>
<p>The benefit of this approach is that in a multi-core AMP system,
a single coredump might contain memory information from other cores.
By analyzing this coredump along with the corresponding ELF files from
the other cores, you can reconstruct the crash site of those other cores.</p>
</section>
<section id="thread-awarenes">
<h2>Thread awarenes<a class="headerlink" href="#thread-awarenes" title="Permalink to this heading"></a></h2>
<p><cite>gdbserver.py</cite> implements thread debugging based on <cite>g_pidhash</cite>, <cite>g_npidhash</cite>,
and <cite>g_tcbinfo</cite> in NuttX. If the log, raw file, or coredump you provide can read these variables,
it means you can use thread-related commands in GDB, such as <cite>info thread</cite> or <cite>thread</cite></p>
</section>
<section id="how-to-add-new-architecture">
<h2>How to add new architecture<a class="headerlink" href="#how-to-add-new-architecture" title="Permalink to this heading"></a></h2>
<p>The main objective is to establish the sequence of registers in GDB,
aligning the register names in the crash log with the order of registers in GDB.
This alignment will facilitate the creation of a new architecture’s GDB server.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="coresight.html" class="btn btn-neutral float-left" title="Coresight - HW Assisted Tracing on ARM" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="gdbwithpython.html" class="btn btn-neutral float-right" title="GDB with Python" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>