lldb debugserver 简明手册

lldb

配置

(lldb) settings list

异常

(lldb) settings set target.process.extra-startup-command QSetIgnoredExceptions:EXC_BAD_INSTRUCTION
(lldb) process handle --pass true --stop false --notify true SIGILL SIGSEGV
exception_types.h
 /*
 *	Machine-independent exception definitions.
 */

#define EXC_BAD_ACCESS          1       /* Could not access memory */
#define EXC_BAD_INSTRUCTION     2       /* Instruction failed */
#define EXC_ARITHMETIC          3       /* Arithmetic exception */
#define EXC_EMULATION           4       /* Emulation instruction */
#define EXC_SOFTWARE            5       /* Software generated exception */
#define EXC_BREAKPOINT          6       /* Trace, breakpoint, etc. */
#define EXC_SYSCALL             7       /* System calls. */
#define EXC_MACH_SYSCALL        8       /* Mach system calls. */
#define EXC_RPC_ALERT           9       /* RPC alert */
#define EXC_CRASH               10      /* Abnormal process exit */
#define EXC_RESOURCE            11      /* Hit resource consumption limit */
#define EXC_GUARD               12      /* Violated guarded resource protections */
#define EXC_CORPSE_NOTIFY       13      /* Abnormal process exited to corpse state */

日志

(lldb) log enable -f /tmp/lldb.log gdb-remote all

% tail -f /tmp/lldb.log

 

(lldb) settings set target.process.extra-startup-command QSetLogging:bitmask=LOG_DEFAULT;

% log stream --process debugserver --style compact
Log flags
/*This expects a packet formatted like
 QSetLogging:bitmask=LOG_ALL|LOG_RNB_REMOTE;
*/

#define LOG_VERBOSE (1u << 0)
#define LOG_PROCESS (1u << 1)
#define LOG_THREAD (1u << 2)
#define LOG_EXCEPTIONS (1u << 3)
#define LOG_SHLIB (1u << 4)
#define LOG_MEMORY (1u << 5)             // Log memory reads/writes calls
#define LOG_MEMORY_DATA_SHORT (1u << 6)  // Log short memory reads/writes bytes
#define LOG_MEMORY_DATA_LONG (1u << 7)   // Log all memory reads/writes bytes
#define LOG_MEMORY_PROTECTIONS (1u << 8) // Log memory protection changes
#define LOG_BREAKPOINTS (1u << 9)
#define LOG_EVENTS (1u << 10)
#define LOG_WATCHPOINTS (1u << 11)
#define LOG_STEP (1u << 12)
#define LOG_TASK (1u << 13)
#define LOG_DARWIN_LOG (1u << 14)
#define LOG_LO_USER (1u << 16)
#define LOG_HI_USER (1u << 31)
#define LOG_ALL 0xFFFFFFFFu
#define LOG_DEFAULT                                                            \
  ((LOG_PROCESS) | (LOG_TASK) | (LOG_THREAD) | (LOG_EXCEPTIONS) |              \
   (LOG_SHLIB) | (LOG_MEMORY) | (LOG_BREAKPOINTS) | (LOG_WATCHPOINTS) |        \
   (LOG_STEP))

#define LOG_NONE 0

// Log bits
// reserve low bits for DNB
#define LOG_RNB_MINIMAL                                                        \
  ((LOG_LO_USER) << 0) // Minimal logging    (min verbosity)
#define LOG_RNB_MEDIUM                                                         \
  ((LOG_LO_USER) << 1)                    // Medium logging     (med verbosity)
#define LOG_RNB_MAX ((LOG_LO_USER) << 2)  // Max logging        (max verbosity)
#define LOG_RNB_COMM ((LOG_LO_USER) << 3) // Log communications (RNBSocket)
#define LOG_RNB_REMOTE ((LOG_LO_USER) << 4) // Log remote         (RNBRemote)
#define LOG_RNB_EVENTS                                                         \
  ((LOG_LO_USER) << 5)                    // Log events         (PThreadEvents)
#define LOG_RNB_PROC ((LOG_LO_USER) << 6) // Log process state  (Process thread)
#define LOG_RNB_PACKETS ((LOG_LO_USER) << 7) // Log gdb remote packets
#define LOG_RNB_ALL (~((LOG_LO_USER)-1))
#define LOG_RNB_DEFAULT (LOG_RNB_ALL)

#define LOG_RNB_NONE 0

debugserver

/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Resources/debugserver --fd=6 --native-regs --setsid
debugserver-@(#)PROGRAM:LLDB  PROJECT:lldb-1700.0.9.46
 for arm64.
Usage:
  debugserver host:port [program-name program-arg1 program-arg2 ...]
  debugserver /path/file [program-name program-arg1 program-arg2 ...]
  debugserver host:port --attach=<pid>
  debugserver /path/file --attach=<pid>
  debugserver host:port --attach=<process_name>
  debugserver /path/file --attach=<process_name>
options
Usage: debugserver [options]
                   kta:A:gKvVl:f:x:w:i:d:rs:I:O:E:nSDW:p:u:P:Re:FU
Options:
  -a, --attach=PID_NAME        Specify process id or name
  -A, --arch=ARCH              Specify target architecture
  -g, --debug                  Enable debugging mode
  -K, --kill-on-error          Kill program on error
  -v, --verbose                Enable verbose log
  -V, --version                Display version information
  -k, --lockdown               Enable lockdown mode
  -t, --applist                Running in applist mode
  -l, --log-file=ARG           Set log file path [stdout|stderr|file-name]
  -f, --log-flags=ARG          Set logging flags (strtoul)
  -x, --launch=TYPE            Set launch method [auto|posix-spawn|fork-exec|springboard]
  -w, --waitfor=NAME           Wait for process by name prefix
  -i, --waitfor-interval=USEC  Set wait interval (seconds)
  -d, --waitfor-duration=USEC  Set wait duration (seconds)
  -r, --native-regs            Use native registers instead of GDB defaults
  -s, --stdio-path=ARG         Set STDIN / STDOUT / STDERR path
  -I, --stdin-path=ARG         Set STDIN path
  -O, --stdout-path=ARG        Set STDOUT path
  -E, --stderr-path=ARG        Set STDERR path
  -n, --no-stdio               Do not set up any stdio
  -S, --setsid                 Put debugserver into a new session.
  -D, --disable-aslr           Use _POSIX_SPAWN_DISABLE_ASLR
  -W, --working-dir=ARG        Set working directory
  -p, --platform=ARG           Enable remote platform mode
  -u, --unix-socket=ARG        Specify unix socket
  -2, --fd=ARG                 Use pre-opened file descriptor
  -P, --named-pipe=ARG         Specify named pipe
  -R, --reverse-connect        Enable reverse connection mode
  -e, --env ARG                Set environment variable (VAR=VAL)
  -F, --forward-env            Forward current environment to child process
  -U, --unmask-signals         Ignore EXC_MASK_BAD_ACCESS, EXC_MASK_BAD_INSTRUCTION, EXC_MASK_ARITHMETIC
 

附录

- LLDB 12.0.0 [commit-27012c0] [debugserver] Add option to propagate SIGSEGV to target process

- LLDB 14.0.0 [commit-3f13723] [lldb] Support gdbserver signals

- LLDB 15.0.0 [commit-bff4673] Add a darwin platform setting to specify which exceptions debugserver

  - 例如,QSetIgnoredExceptions:EXC_BAD_INSTRUCTION|EXC_xxxxx

 

posted @ 2025-05-31 00:55  UPeRVv  阅读(57)  评论(0)    收藏  举报