C言語 - LLDB - 基本

クラウディア 
1. 概要
2. ここでの話
3. 起動・終了

1. 概要

 世の中は「GCC」から「Clang」へ向かっているようで・・・。  Clang は「LLVM」の言語で、LLVM のデバッグ環境は LLDB なのです。  以下のサイトを参考にさせていただきました。
LLDBを使ってCのデバッグをする

2. ここでの話

 わたしが普段使っている環境は
OS			FreeBSD 10.3 RELEASE i386
コンパイラ	Clang 3.4.1
 なのですが、これには、LLDB もインストールしています。  というか、何かの依存でしょうか?いつの間にかインストールされていたというのが正直な話ですが。  lldb39 と lldb40 の2つのバージョンがはいっていました。  細かく述べると

> lldb39 --version
lldb version 3.9.1 ( revision )
> lldb40 --version
lldb version 4.0.1
 とりあえず、lldb40 の方を使ってみようと思います。なので .cshrc にちょっと細工

alias lldb      lldb40

3. 起動・終了

 デバッガにそこまでの違いはないようです。起動して、ヘルプを表示して、終了してみます。

> lldb デバッグ対象のプログラム名
(lldb) target create "プログラム名"
(lldb) h								←	ヘルプの表示
(lldb) q								←	終了(quit の略)
 実際にやってみるとこうなります。

> lldb curses								← たまたまこういうプログラムをデバッグしていた
(lldb) target create "curses"
Current executable set to 'curses' (i386).
(lldb) h
Debugger commands:
  apropos           -- List debugger commands related to a word or subject.
  breakpoint        -- Commands for operating on breakpoints (see 'help b' for shorthand.)
  bugreport         -- Commands for creating domain-specific bug reports.
  command           -- Commands for managing custom LLDB commands.
  disassemble       -- Disassemble specified instructions in the current target.  Defaults to the current function for the
                       current thread and stack frame.
  expression        -- Evaluate an expression on the current thread.  Displays any returned value with LLDB's default formatting.
  frame             -- Commands for selecting and examing the current thread's stack frames.
  gdb-remote        -- Connect to a process via remote GDB server.  If no host is specifed, localhost is assumed.
  gui               -- Switch into the curses based GUI mode.
  help              -- Show a list of all debugger commands, or give details about a specific command.
  kdp-remote        -- Connect to a process via remote KDP server.  If no UDP port is specified, port 41139 is assumed.
  language          -- Commands specific to a source language.
  log               -- Commands controlling LLDB internal logging.
  memory            -- Commands for operating on memory in the current target process.
  platform          -- Commands to manage and create platforms.
  plugin            -- Commands for managing LLDB plugins.
  process           -- Commands for interacting with processes on the current platform.
  quit              -- Quit the LLDB debugger.
  register          -- Commands to access registers for the current thread and stack frame.
  script            -- Invoke the script interpreter with provided code and display any results.  Start the interactive
                       interpreter if no code is supplied.
  settings          -- Commands for managing LLDB settings.
  source            -- Commands for examining source code described by debug information for the current target process.
  target            -- Commands for operating on debugger targets.
  thread            -- Commands for operating on one or more threads in the current process.
  type              -- Commands for operating on the type system.
  version           -- Show the LLDB debugger version.
  watchpoint        -- Commands for operating on watchpoints.
Current command abbreviations (type 'help command alias' for more info):
  add-dsym  -- Add a debug symbol file to one of the target's current modules by specifying a path to a debug symbols file, or
               using the options to specify a module to download symbols for.
  attach    -- Attach to process by ID or name.
  b         -- Set a breakpoint using one of several shorthand formats.
  bt        -- Show the current thread's call stack.  Any numeric argument displays at most that many frames.  The argument 'all'
               displays all threads.
  c         -- Continue execution of all threads in the current process.
  call      -- Evaluate an expression on the current thread.  Displays any returned value with LLDB's default formatting.
  continue  -- Continue execution of all threads in the current process.
  detach    -- Detach from the current target process.
  di        -- Disassemble specified instructions in the current target.  Defaults to the current function for the current thread
               and stack frame.
  dis       -- Disassemble specified instructions in the current target.  Defaults to the current function for the current thread
               and stack frame.
  display   -- Evaluate an expression at every stop (see 'help target stop-hook'.)
  down      -- Select a newer stack frame.  Defaults to moving one frame, a numeric argument can specify an arbitrary number.
  env       -- Shorthand for viewing and setting environment variables.
  exit      -- Quit the LLDB debugger.
  f         -- Select the current stack frame by index from within the current thread (see 'thread backtrace'.)
  file      -- Create a target using the argument as the main executable.
  finish    -- Finish executing the current stack frame and stop after returning.  Defaults to current thread unless specified.
  image     -- Commands for accessing information for one or more target modules.
  j         -- Set the program counter to a new address.
  jump      -- Set the program counter to a new address.
  kill      -- Terminate the current target process.
  l         -- List relevant source code using one of several shorthand formats.
  list      -- List relevant source code using one of several shorthand formats.
  n         -- Source level single step, stepping over calls.  Defaults to current thread unless specified.
  next      -- Source level single step, stepping over calls.  Defaults to current thread unless specified.
  nexti     -- Instruction level single step, stepping over calls.  Defaults to current thread unless specified.
  ni        -- Instruction level single step, stepping over calls.  Defaults to current thread unless specified.
  p         -- Evaluate an expression on the current thread.  Displays any returned value with LLDB's default formatting.
  parray    -- Evaluate an expression on the current thread.  Displays any returned value with LLDB's default formatting.
  po        -- Evaluate an expression on the current thread.  Displays any returned value with formatting controlled by the
               type's author.
  poarray   -- Evaluate an expression on the current thread.  Displays any returned value with LLDB's default formatting.
  print     -- Evaluate an expression on the current thread.  Displays any returned value with LLDB's default formatting.
  q         -- Quit the LLDB debugger.
  r         -- Launch the executable in the debugger.
  rbreak    -- Sets a breakpoint or set of breakpoints in the executable.
  run       -- Launch the executable in the debugger.
  s         -- Source level single step, stepping into calls.  Defaults to current thread unless specified.
  si        -- Instruction level single step, stepping into calls.  Defaults to current thread unless specified.
  sif       -- Step through the current block, stopping if you step directly into a function whose name matches the
               TargetFunctionName.
  step      -- Source level single step, stepping into calls.  Defaults to current thread unless specified.
  stepi     -- Instruction level single step, stepping into calls.  Defaults to current thread unless specified.
  t         -- Change the currently selected thread.
  tbreak    -- Set a one-shot breakpoint using one of several shorthand formats.
  undisplay -- Stop displaying expression at every stop (specified by stop-hook index.)
  up        -- Select an older stack frame.  Defaults to moving one frame, a numeric argument can specify an arbitrary number.
  x         -- Read from the memory of the current target process.
For more information on any command, type 'help <command-name>'.
(lldb) q