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

浙公網安備 33010602011771號