[AMDGPU] Add True16 register classes.
[llvm-project.git] / lldb / docs / resources / debugging.rst
blob0af1de1581c4bd0be85480d24adecc7ab979dc8a
1 Debugging
2 =========
4 This page details various ways to debug LLDB itself and other LLDB tools. If
5 you want to know how to use LLDB in general, please refer to
6 :doc:`/use/tutorial`.
8 As LLDB is generally split into 2 tools, ``lldb`` and ``lldb-server``
9 (``debugserver`` on Mac OS), the techniques shown here will not always apply to
10 both. With some knowledge of them all, you can mix and match as needed.
12 In this document we refer to the initial ``lldb`` as the "debugger" and the
13 program being debugged as the "inferior".
15 Building For Debugging
16 ----------------------
18 To build LLDB with debugging information add the following to your CMake
19 configuration:
23   -DCMAKE_BUILD_TYPE=Debug \
24   -DLLDB_EXPORT_ALL_SYMBOLS=ON
26 Note that the ``lldb`` you will use to do the debugging does not itself need to
27 have debug information.
29 Then build as you normally would according to :doc:`/resources/build`.
31 If you are going to debug in a way that doesn't need debug info (printf, strace,
32 etc.) we recommend adding ``LLVM_ENABLE_ASSERTIONS=ON`` to Release build
33 configurations. This will make LLDB fail earlier instead of continuing with
34 invalid state (assertions are enabled by default for Debug builds).
36 Debugging ``lldb``
37 ------------------
39 The simplest scenario is where we want to debug a local execution of ``lldb``
40 like this one:
44   ./bin/lldb test_program
46 LLDB is like any other program, so you can use the same approach.
50   ./bin/lldb -- ./bin/lldb /tmp/test.o
52 That's it. At least, that's the minimum. There's nothing special about LLDB
53 being a debugger that means you can't attach another debugger to it like any
54 other program.
56 What can be an issue is that both debuggers have command line interfaces which
57 makes it very confusing which one is which:
61   (the debugger)
62   (lldb) run
63   Process 1741640 launched: '<...>/bin/lldb' (aarch64)
64   Process 1741640 stopped and restarted: thread 1 received signal: SIGCHLD
66   (the inferior)
67   (lldb) target create "/tmp/test.o"
68   Current executable set to '/tmp/test.o' (aarch64).
70 Another issue is that when you resume the inferior, it will not print the
71 ``(lldb)`` prompt because as far as it knows it hasn't changed state. A quick
72 way around that is to type something that is clearly not a command and hit
73 enter.
77   (lldb) Process 1742266 stopped and restarted: thread 1 received signal: SIGCHLD
78   Process 1742266 stopped
79   * thread #1, name = 'lldb', stop reason = signal SIGSTOP
80       frame #0: 0x0000ffffed5bfbf0 libc.so.6`__GI___libc_read at read.c:26:10
81   (lldb) c
82   Process 1742266 resuming
83   notacommand
84   error: 'notacommand' is not a valid command.
85   (lldb)
87 You could just remember whether you are in the debugger or the inferior but
88 it's more for you to remember, and for interrupt based events you simply may not
89 be able to know.
91 Here are some better approaches. First, you could use another debugger like GDB
92 to debug LLDB. Perhaps an IDE like Xcode or Visual Studio Code. Something which
93 runs LLDB under the hood so you don't have to type in commands to the debugger
94 yourself.
96 Or you could change the prompt text for the debugger and/or inferior.
100   $ ./bin/lldb -o "settings set prompt \"(lldb debugger) \"" -- \
101     ./bin/lldb -o "settings set prompt \"(lldb inferior) \"" /tmp/test.o
102   <...>
103   (lldb) settings set prompt "(lldb debugger) "
104   (lldb debugger) run
105   <...>
106   (lldb) settings set prompt "(lldb inferior) "
107   (lldb inferior)
109 If you want spacial separation you can run the inferior in one terminal then
110 attach to it in another. Remember that while paused in the debugger, the inferior
111 will not respond to input so you will have to ``continue`` in the debugger
112 first.
116   (in terminal A)
117   $ ./bin/lldb /tmp/test.o
119   (in terminal B)
120   $ ./bin/lldb ./bin/lldb --attach-pid $(pidof lldb)
122 Placing Breakpoints
123 *******************
125 Generally you will want to hit some breakpoint in the inferior ``lldb``. To place
126 that breakpoint you must first stop the inferior.
128 If you're debugging from another window this is done with ``process interrupt``.
129 The inferior will stop, you place the breakpoint and then ``continue``. Go back
130 to the inferior and input the command that should trigger the breakpoint.
132 If you are running debugger and inferior in the same window, input ``ctrl+c``
133 instead of ``process interrupt`` and then folllow the rest of the steps.
135 If you are doing this with ``lldb-server`` and find your breakpoint is never
136 hit, check that you are breaking in code that is actually run by
137 ``lldb-server``. There are cases where code only used by ``lldb`` ends up
138 linked into ``lldb-server``, so the debugger can break there but the breakpoint
139 will never be hit.
141 Debugging ``lldb-server``
142 -------------------------
144 Note: If you are on MacOS you are likely using ``debugserver`` instead of
145 ``lldb-server``. The spirit of these instructions applies but the specifics will
146 be different.
148 We suggest you read :doc:`/use/remote` before attempting to debug ``lldb-server``
149 as working out exactly what you want to debug requires that you understand its
150 various modes and behaviour. While you may not be literally debugging on a
151 remote target, think of your host machine as the "remote" in this scenario.
153 The ``lldb-server`` options for your situation will depend on what part of it
154 or mode you are interested in. To work out what those are, recreate the scenario
155 first without any extra debugging layers. Let's say we want to debug
156 ``lldb-server`` during the following command:
160   $ ./bin/lldb /tmp/test.o
162 We can treat ``lldb-server`` as we treated ``lldb`` before, running it under
163 ``lldb``. The equivalent to having ``lldb`` launch the ``lldb-server`` for us is
164 to start ``lldb-server`` in the ``gdbserver`` mode.
166 The following commands recreate that, while debugging ``lldb-server``:
170   $ ./bin/lldb -- ./bin/lldb-server gdbserver :1234 /tmp/test.o
171   (lldb) target create "./bin/lldb-server"
172   Current executable set to '<...>/bin/lldb-server' (aarch64).
173   <...>
174   Process 1742485 launched: '<...>/bin/lldb-server' (aarch64)
175   Launched '/tmp/test.o' as process 1742586...
177   (in another terminal)
178   $ ./bin/lldb /tmp/test.o -o "gdb-remote 1234"
180 Note that the first ``lldb`` is the one debugging ``lldb-server``. The second
181 ``lldb`` is debugging ``/tmp/test.o`` and is only used to trigger the
182 interesting code path in ``lldb-server``.
184 This is another case where you may want to layout your terminals in a
185 predictable way, or change the prompt of one or both copies of ``lldb``.
187 If you are debugging a scenario where the ``lldb-server`` starts in ``platform``
188 mode, but you want to debug the ``gdbserver`` mode you'll have to work out what
189 subprocess it's starting for the ``gdbserver`` part. One way is to look at the
190 list of runninng processes and take the command line from there.
192 In theory it should be possible to use LLDB's
193 ``target.process.follow-fork-mode`` or GDB's ``follow-fork-mode`` to
194 automatically debug the ``gdbserver`` process as it's created. However this
195 author has not been able to get either to work in this scenario so we suggest
196 making a more specific command wherever possible instead.
198 Another option is to let ``lldb-server`` start up, then attach to the process
199 that's interesting to you. It's less automated and won't work if the bug occurs
200 during startup. However it is a good way to know you've found the right one,
201 then you can take its command line and run that directly.
203 Output From ``lldb-server``
204 ***************************
206 As ``lldb-server`` often launches subprocesses, output messages may be hidden
207 if they are emitted from the child processes.
209 You can tell it to enable logging using the ``--log-channels`` option. For
210 example ``--log-channels "posix ptrace"``. However that is not passed on to the
211 child processes.
213 The same goes for ``printf``. If it's called in a child process you won't see
214 the output.
216 In these cases consider either interactive debugging ``lldb-server`` or
217 working out a more specific command such that it does not have to spawn a
218 subprocess. For example if you start with ``platform`` mode, work out what
219 ``gdbserver`` mode process it spawns and run that command instead.
221 Remote Debugging
222 ----------------
224 If you want to debug part of LLDB running on a remote machine, the principals
225 are the same but we will have to start debug servers, then attach debuggers to
226 those servers.
228 In the example below we're debugging an ``lldb-server`` ``gdbserver`` mode
229 command running on a remote machine.
231 For simplicity we'll use the same ``lldb-server`` as the debug server
232 and the inferior, but it doesn't need to be that way. You can use ``gdbserver``
233 (as in, GDB's debug server program) or a system installed ``lldb-server`` if you
234 suspect your local copy is not stable. As is the case in many of these
235 scenarios.
239   $ <...>/bin/lldb-server gdbserver 0.0.0.0:54322 -- \
240     <...>/bin/lldb-server gdbserver 0.0.0.0:54321 -- /tmp/test.o
242 Now we have a debug server listening on port 54322 of our remote (``0.0.0.0``
243 means it's listening for external connections). This is where we will connect
244 ``lldb`` to, to debug the second ``lldb-server``.
246 To trigger behaviour in the second ``lldb-server``, we will connect a second
247 ``lldb`` to port 54321 of the remote.
249 This is the final configuration:
253   Host                                        | Remote
254   --------------------------------------------|--------------------
255   lldb A debugs lldb-server on port 54322 ->  | lldb-server A
256                                               |  (which runs)
257   lldb B debugs /tmp/test.o on port 54321 ->  |    lldb-server B
258                                               |      (which runs)
259                                               |        /tmp/test.o
261 You would use ``lldb A`` to place a breakpoint in the code you're interested in,
262 then ``lldb B`` to trigger ``lldb-server B`` to go into that code and hit the
263 breakpoint. ``lldb-server A`` is only here to let us debug ``lldb-server B``
264 remotely.
266 Debugging The Remote Protocol
267 -----------------------------
269 LLDB mostly follows the `GDB Remote Protocol <https://sourceware.org/gdb/onlinedocs/gdb/Remote-Protocol.html>`_
270 . Where there are differences it tries to handle both LLDB and GDB behaviour.
272 LLDB does have extensions to the protocol which are documented in
273 `lldb-gdb-remote.txt <https://github.com/llvm/llvm-project/blob/main/lldb/docs/lldb-gdb-remote.txt>`_
274 and `lldb/docs/lldb-platform-packets.txt <https://github.com/llvm/llvm-project/blob/main/lldb/docs/lldb-platform-packets.txt>`_.
276 Logging Packets
277 ***************
279 If you just want to observe packets, you can enable the ``gdb-remote packets``
280 log channel.
284   (lldb) log enable gdb-remote packets
285   (lldb) run
286   lldb             <   1> send packet: +
287   lldb             history[1] tid=0x264bfd <   1> send packet: +
288   lldb             <  19> send packet: $QStartNoAckMode#b0
289   lldb             <   1> read packet: +
291 You can do this on the ``lldb-server`` end as well by passing the option
292 ``--log-channels "gdb-remote packets"``. Then you'll see both sides of the
293 connection.
295 Some packets may be printed in a nicer way than others. For example XML packets
296 will print the literal XML, some binary packets may be decoded. Others will just
297 be printed unmodified. So do check what format you expect, a common one is hex
298 encoded bytes.
300 You can enable this logging even when you are connecting to an ``lldb-server``
301 in platform mode, this protocol is used for that too.
303 Debugging Packet Exchanges
304 **************************
306 Say you want to make ``lldb`` send a packet to ``lldb-server``, then debug
307 how the latter builds its response. Maybe even see how ``lldb`` handles it once
308 it's sent back.
310 That all takes time, so LLDB will likely time out and think the remote has gone
311 away. You can change the ``plugin.process.gdb-remote.packet-timeout`` setting
312 to prevent this.
314 Here's an example, first we'll start an ``lldb-server`` being debugged by
315 ``lldb``. Placing a breakpoint on a packet handler we know will be hit once
316 another ``lldb`` connects.
320   $ lldb -- lldb-server gdbserver :1234 -- /tmp/test.o
321   <...>
322   (lldb) b GDBRemoteCommunicationServerCommon::Handle_qSupported
323   Breakpoint 1: where = <...>
324   (lldb) run
325   <...>
327 Next we connect another ``lldb`` to this, with a timeout of 5 minutes:
331   $ lldb /tmp/test.o
332   <...>
333   (lldb) settings set plugin.process.gdb-remote.packet-timeout 300
334   (lldb) gdb-remote 1234
336 Doing so triggers the breakpoint in ``lldb-server``, bringing us back into
337 ``lldb``. Now we've got 5 minutes to do whatever we need before LLDB decides
338 the connection has failed.
342   * thread #1, name = 'lldb-server', stop reason = breakpoint 1.1
343       frame #0: 0x0000aaaaaacc6848 lldb-server<...>
344   lldb-server`lldb_private::process_gdb_remote::GDBRemoteCommunicationServerCommon::Handle_qSupported:
345   ->  0xaaaaaacc6848 <+0>:  sub    sp, sp, #0xc0
346   <...>
347   (lldb)
349 Once you're done simply ``continue`` the ``lldb-server``. Back in the other
350 ``lldb``, the connection process will continue as normal.
354   Process 2510266 stopped
355   * thread #1, name = 'test.o', stop reason = signal SIGSTOP
356       frame #0: 0x0000fffff7fcd100 ld-2.31.so`_start
357   ld-2.31.so`_start:
358   ->  0xfffff7fcd100 <+0>: mov    x0, sp
359   <...>
360   (lldb)
362 Reducing Bugs
363 -------------
365 This section covers reducing a bug that happens in LLDB itself, or where you
366 suspect that LLDB causes something else to behave abnormally.
368 Since bugs vary wildly, the advice here is general and incomplete. Let your
369 instincts guide you and don't feel the need to try everything before reporting
370 an issue or asking for help. This is simply inspiration.
372 Reduction
373 *********
375 The first step is to reduce uneeded compexity where it is cheap to do so. If
376 something is easily removed or frozen to a cerain value, do so. The goal is to
377 keep the failure mode the same, with fewer dependencies.
379 This includes, but is not limited to:
381 * Removing test cases that don't crash.
382 * Replacing dynamic lookups with constant values.
383 * Replace supporting functions with stubs that do nothing.
384 * Moving the test case to less unqiue system. If your machine has an exotic
385   extension, try it on a readily available commodity machine.
386 * Removing irrelevant parts of the test program.
387 * Reproducing the issue without using the LLDB test runner.
388 * Converting a remote debuging scenario into a local one.
390 Now we hopefully have a smaller reproducer than we started with. Next we need to
391 find out what components of the software stack might be failing.
393 Some examples are listed below with suggestions for how to investigate them.
395 * Debugger
397   * Use a `released version of LLDB <https://github.com/llvm/llvm-project/releases>`_.
399   * If on MacOS, try the system ``lldb``.
401   * Try GDB or any other system debugger you might have e.g. Microsoft Visual
402     Studio.
404 * Kernel
406   * Start a virtual machine running a different version. ``qemu-system`` is
407     useful here.
409   * Try a different physical system running a different version.
411   * Remember that for most kernels, userspace crashing the kernel is always a
412     kernel bug. Even if the userspace program is doing something unconventional.
413     So it could be a bug in the application and the kernel.
415 * Compiler and compiler options
417   * Try other versions of the same compiler or your system compiler.
419   * Emit older versions of DWARF info, particularly DWARFv4 to v5, some tools
420     did/do not understand the new constructs.
422   * Reduce optimisation options as much as possible.
424   * Try all the language modes e.g. C++17/20 for C++.
426   * Link against LLVM's libcxx if you suspect a bug involving the system C++
427     library.
429   * For languages other than C/C++ e.g. Rust, try making an equivalent program
430     in C/C++. LLDB tends to try to fit other languages into a C/C++ mould, so
431     porting the program can make triage and reporting much easier.
433 * Operating system
435   * Use docker to try various versions of Linux.
437   * Use ``qemu-system`` to emulate other operating systems e.g. FreeBSD.
439 * Architecture
441   * Use `QEMU user space emulation <https://www.qemu.org/docs/master/user/main.html>`_
442     to quickly test other architectures. Note that ``lldb-server`` cannot be used
443     with this as the ptrace APIs are not emulated.
445   * If you need to test a big endian system use QEMU to emulate s390x (user
446     space emulation for just ``lldb``, ``qemu-system`` for testing
447     ``lldb-server``).
449 .. note:: When using QEMU you may need to use the built in GDB stub, instead of
450           ``lldb-server``. For example if you wanted to debug ``lldb`` running
451           inside ``qemu-user-s390x`` you would connect to the GDB stub provided
452           by QEMU.
454           The same applies if you want to see how ``lldb`` would debug a test
455           program that is running on s390x. It's not totally accurate because
456           you're not using ``lldb-server``, but this is fine for features that
457           are mostly implemented in ``lldb``.
459           If you are running a full system using ``qemu-system``, you likely
460           want to connect to the ``lldb-server`` running within the userspace
461           of that system.
463           If your test program is bare metal (meaning it requires no supporting
464           operating system) then connect to the built in GDB stub. This can be
465           useful when testing embedded systems or kernel debugging.
467 Reducing Ptrace Related Bugs
468 ****************************
470 This section is written Linux specific but the same can likely be done on
471 other Unix or Unix like operating systems.
473 Sometimes you will find ``lldb-server`` doing something with ptrace that causes
474 a problem. Your reproducer involves running ``lldb`` as well, this is not going
475 to go over well with kernel and is generally more difficult to explain if you
476 want to get help with it.
478 If you think you can get your point across without this, no need. If you're
479 pretty sure you have for example found a Linux Kernel bug, doing this greatly
480 increases the chances it'll get fixed.
482 We'll remove the LLDB dependency by making a smaller standalone program that
483 does the same actions. Starting with a skeleton program that forks and debugs
484 the inferior process.
486 The program presented `here <https://eli.thegreenplace.net/2011/01/23/how-debuggers-work-part-1>`_
487 (`source <https://github.com/eliben/code-for-blog/blob/master/2011/simple_tracer.c>`_)
488 is a great starting point. There is also an AArch64 specific example in
489 `the LLDB examples folder <https://github.com/llvm/llvm-project/tree/main/lldb/examples/ptrace_example.c>`_.
491 For either, you'll need to modify that to fit your architecture. An tip for this
492 is to take any constants used in it, find in which function(s) they are used in
493 LLDB and then you'll find the equivalent constants in the same LLDB functions
494 for your architecture.
496 Once that is running as expected we can convert ``lldb-server``'s into calls in
497 this program. To get a log of those, run ``lldb-server`` with
498 ``--log-channels "posix ptrace"``. You'll see output like:
502   $ lldb-server gdbserver :1234 --log-channels "posix ptrace" -- /tmp/test.o
503   1694099878.829990864 <...> ptrace(16896, 2659963, 0x0000000000000000, 0x000000000000007E, 0)=0x0
504   1694099878.830722332 <...> ptrace(16900, 2659963, 0x0000FFFFD14BF7CC, 0x0000FFFFD14BF7D0, 16)=0x0
505   1694099878.831967115 <...> ptrace(16900, 2659963, 0x0000FFFFD14BF66C, 0x0000FFFFD14BF630, 16)=0xffffffffffffffff
506   1694099878.831982136 <...> ptrace() failed: Invalid argument
507   Launched '/tmp/test.o' as process 2659963...
509 Each call is logged with its parameters and its result as the ``=`` on the end.
511 From here you will need to use a combination of the `ptrace documentation <https://man7.org/linux/man-pages/man2/ptrace.2.html>`_
512 and Linux Kernel headers (``uapi/linux/ptrace.h`` mainly) to figure out what
513 the calls are.
515 The most important parameter is the first, which is the request number. In the
516 example above ``16896``, which is hex ``0x4200``, is ``PTRACE_SETOPTIONS``.
518 Luckily, you don't usually have to figure out all those early calls. Our
519 skeleton program will be doing all that, successfully we hope.
521 What you should do is record just the interesting bit to you. Let's say
522 something odd is happening when you read the ``tpidr`` register (this is an
523 AArch64 register, just for example purposes).
525 First, go to the ``lldb-server`` terminal and press enter a few times to put
526 some blank lines after the last logging output.
528 Then go to your ``lldb`` and:
532   (lldb) register read tpidr
533   tpidr = 0x0000fffff7fef320
535 You'll see this from ``lldb-server``:
539   <...> ptrace(16900, 2659963, 0x0000FFFFD14BF6CC, 0x0000FFFFD14BF710, 8)=0x0
541 If you don't see that, it may be because ``lldb`` has cached it. The easiest way
542 to clear that cache is to step. Remember that some registers are read every
543 step, so you'll have to adjust depending on the situation.
545 Assuming you've got that line, you would look up what ``116900`` is. This is
546 ``0x4204`` in hex, which is ``PTRACE_GETREGSET``. As we expected.
548 The following parameters are not as we might expect because what we log is a bit
549 different from the literal ptrace call. See your platform's definition of
550 ``PtraceWrapper`` for the exact form.
552 The point of all this is that by doing a single action you can get a few
553 isolated ptrace calls and you can then fill in the blanks and write
554 equivalent calls in the skeleton program.
556 The final piece of this is likely breakpoints. Assuming your bug does not
557 require a hardware breakpoint, you can get software breakpoints by inserting
558 a break instruction into the inferior's code at compile time. Usually by using
559 an architecture specific assembly statement, as you will need to know exactly
560 how many instructions to overwrite later.
562 Doing it this way instead of exactly copying what LLDB does will save a few
563 ptrace calls. The AArch64 example program shows how to do this.
565 * The inferior contains ``BRK #0`` then ``NOP``.
566 * 2 4 byte instructins means 8 bytes of data to replace, which matches the
567   minimum size you can write with ``PTRACE_POKETEXT``.
568 * The inferior runs to the ``BRK``, which brings us into the debugger.
569 * The debugger reads ``PC`` and writes ``NOP`` then ``NOP`` to the location
570   pointed to by ``PC``.
571 * The debugger then single steps the inferior to the next instruction
572   (this is not required in this specific scenario, you could just continue but
573   it is included because this more cloesly matches what ``lldb`` does).
574 * The debugger then continues the inferior.
575 * The inferior exits, and the whole program exits.
577 Using this technique you can emulate the usual "run to main, do a thing" type
578 reproduction steps.
580 Finally, that "thing" is the ptrace calls you got from the ``lldb-server`` logs.
581 Add those to the debugger function and you now have a reproducer that doesn't
582 need any part of LLDB.
584 Debugging Tests
585 ---------------
587 See :doc:`/resources/test`.