LLDB vs GDB
来源:互联网 发布:网络在线理财产品收益 编辑:程序博客网 时间:2024/05/19 09:51
原文地址:http://blog.sina.com.cn/s/blog_6dce99b10101gwww.html
LLDBGDBLaunch a process no arguments.(lldb)(lldb)
(lldb)
(gdb)
(lldb)
(gdb)
a.out 1 2 3
(lldb)
...
(lldb)
...%
(gdb)
...
(gdb)
...Launch a process with arguments in new terminal window (Mac OS X only).(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(gdb)
(lldb)
(lldb)
(gdb)
(lldb)
(gdb)
(lldb)
(gdb)
(lldb)
Enter your stop hook command(s). Type 'DONE' to end.
> bt
> disassemble --pc
> DONE
Stop hook #1 added.
BREAKPOINT COMMANDS
LLDBGDBSet a breakpoint at all functions named main.(lldb) breakpoint set --name main
(lldb)br s -n main
(lldb)b main(gdb) break mainSet a breakpoint in file test.c at line 12.(lldb) breakpoint set --file test.c --line 12
(lldb)br s -f test.c -l 12
(lldb)b test.c:12(gdb) break test.c:12Set a breakpoint at all C++ methods whose basename is main.(lldb) breakpoint set --method main
(lldb)br s -M main(gdb) break main
(Hope that there are no C funtions namedmain) .Set a breakpoint at and object C function: -[NSString stringWithFormat:].(lldb) breakpoint set --name "-[NSString stringWithFormat:]"
(lldb)b -[NSString stringWithFormat:](gdb) break -[NSString stringWithFormat:]Set a breakpoint at all Objective C methods whose selector is count.(lldb) breakpoint set --selector count
(lldb)br s -S count(gdb) break count
(Hope that there are no C or C++ funtions namedcount).List all breakpoints.(lldb)breakpoint list
(lldb)br l(gdb) info breakDelete a breakpoint.(lldb) breakpoint delete 1
(lldb)br del 1(gdb) delete 1
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(Hope that there are no C funtions named
(lldb)
(lldb)
(Hope that there are no C or C++ funtions namedcount).List all breakpoints.(lldb)
(lldb)
(lldb)
WATCHPOINT COMMANDS
LLDBGDBSet a watchpoint on a variable when it is written to.(lldb) watchpoint set variable -w write global_var
(lldb)watch set var -w write global_var(gdb) watch global_varSet a watchpoint on a memory location when it is written into. The size of the region to watch for defaults to the pointer size if no '-x byte_size' is specified. This command takes raw input, evaluated as an expression returning an unsigned integer pointing to the start of the region, after the '--' option terminator.(lldb) watchpoint set expression -w write -- my_ptr
(lldb)watch set exp -w write -- my_ptr(gdb) watch -location g_char_ptrSet a condition on a watchpoint.(lldb) watch set var -w write global
(lldb)watchpoint modify -c '(global==5)'
(lldb)c
...
(lldb)bt
* thread #1: tid = 0x1c03, 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16, stop reason = watchpoint 1
frame #0: 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16
frame #1: 0x0000000100000eac a.out`main + 108 at main.cpp:25
frame #2: 0x00007fff8ac9c7e1 libdyld.dylib`start + 1
(lldb)frame var global
(int32_t) global = 5List all watchpoints.(lldb)watchpoint list
(lldb)watch l(gdb) info breakDelete a watchpoint.(lldb) watchpoint delete 1
(lldb)watch del 1(gdb) delete 1
(lldb)
(lldb)
(lldb)
(lldb)
...
(lldb)
* thread #1: tid = 0x1c03, 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16, stop reason = watchpoint 1
frame #0: 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16
frame #1: 0x0000000100000eac a.out`main + 108 at main.cpp:25
frame #2: 0x00007fff8ac9c7e1 libdyld.dylib`start + 1
(lldb)
(int32_t) global = 5List all watchpoints.(lldb)
(lldb)
(lldb)
EXAMINING VARIABLES
LLDBGDBShow the arguments and local variables for the current frame.(lldb) frame variable(gdb) info args
and
(gdb)info localsShow the local variables for the current frame.(lldb) frame variable --no-args
(lldb)fr v -a(gdb) info localsShow the contents of local variable "bar".(lldb) frame variable bar
(lldb)fr v bar
(lldb)p bar (gdb) p barShow the contents of local variable "bar" formatted as hex.(lldb) frame variable --format x bar
(lldb)fr v -f x bar (gdb) p/x barShow the contents of global variable "baz".(lldb) target variable baz
(lldb)ta v baz (gdb) p bazShow the global/static variables defined in the current source file.(lldb) target variable
(lldb)ta v n/aDisplay a the variable "argc" and "argv" every time you stop.(lldb) target stop-hook add --one-liner "frame variable argc argv"
(lldb)ta st a -o "fr v argc argv"
(lldb)display argc
(lldb)display argv(gdb) display argc
(gdb)display argvDisplay a the variable "argc" and "argv" only when you stop in the function named main.(lldb) target stop-hook add --name main --one-liner "frame variable argc argv"
(lldb)ta st a -n main -o "fr v argc argv"Display the variable "*this" only when you stop in c class named MyClass.(lldb) target stop-hook add --classname MyClass --one-liner "frame variable *this"
(lldb)ta st a -c MyClass -o "fr v *this"
and
(gdb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(gdb)
(lldb)
(lldb)
EVALUATING EXPRESSIONS
LLDBGDBEvaluating a generalized expression in the current frame.(lldb) expr (int) printf ("Print nine: %d.", 4 + 5)
or using the print alias:
(lldb)print (int) printf ("Print nine: %d.", 4 + 5)(gdb) print (int) printf ("Print nine: %d.", 4 + 5)
or if you don't want to see void returns:
(gdb)call (int) printf ("Print nine: %d.", 4 + 5)Printing the ObjC "description" of an object.(lldb) expr -o -- [SomeClass returnAnObject]
or using the po alias:
(lldb)po [SomeClass returnAnObject](gdb) po [SomeClass returnAnObject]Print the dynamic type of the result of an expression.(lldb) expr -d 1 -- [SomeClass returnAnObject]
(lldb)expr -d 1 -- someCPPObjectPtrOrReference
or set dynamic type printing to be the default:(lldb)settings set target.prefer-dynamic run-target(gdb) set print object 1
(gdb)p someCPPObjectPtrOrReference
only works for C++ objects.
or using the print alias:
(lldb)
or if you don't want to see void returns:
(gdb)
or using the po alias:
(lldb)
(lldb)
or set dynamic type printing to be the default:(lldb)
(gdb)
only works for C++ objects.
EXAMINING THREAD STATE
LLDBGDBShow the stack backtrace for the current thread.(lldb) thread backtrace
(lldb)bt(gdb) btShow the stack backtraces for all threads.(lldb) thread backtrace all
(lldb)bt all(gdb) thread apply all btSelect a different stack frame by index for the current thread.(lldb) frame select 12(gdb) frame 12List information about the currently selected frame in the current thread.(lldb) frame info Select the stack frame that called the current stack frame.(lldb) up
(lldb)frame select --relative=1(gdb) upSelect the stack frame that is called by the current stack frame.(lldb) down
(lldb)frame select --relative=-1
(lldb)fr s -r-1(gdb) downSelect a different stack frame using a relative offset.(lldb) frame select --relative 2
(lldb)fr s -r2
(lldb)frame select --relative -3
(lldb)fr s -r-3(gdb) up 2
(gdb)down 3Show the general purpose registers for the current thread.(lldb) register read(gdb) info registersShow the general purpose registers for the current thread formatted as signed decimal. LLDB tries to use the same format characters as printf(3) when possible. Type "help format" to see the full list of format specifiers.(lldb) register read --format i
(lldb)re r -f i
LLDB now supports the GDB shorthand format syntax but there can't be space after the command:
(lldb)register read/d Show all registers in all register sets for the current thread.(lldb) register read --all
(lldb)re r -a(gdb) info all-registersShow the values for the registers named "rax", "rsp" and "rbp" in the current thread.(lldb) register read rax rsp rbp(gdb) info all-registers rax rsp rbpShow the values for the register named "rax" in the current thread formatted as binary.(lldb) register read --format binary rax
(lldb)re r -f b rax
LLDB now supports the GDB shorthand format syntax but there can't be space after the command:
(lldb)register read/t rax
(lldb)p/t $rax(gdb) p/t $raxRead memory from address 0xbffff3c0 and show 4 hex uint32_t values.(lldb) memory read --size 4 --format x --count 4 0xbffff3c0
(lldb)me r -s4 -fx -c4 0xbffff3c0
(lldb)x -s4 -fx -c4 0xbffff3c0
LLDB now supports the GDB shorthand format syntax but there can't be space after the command:
(lldb)memory read/4xw 0xbffff3c0
(lldb)x/4xw 0xbffff3c0
(lldb)memory read --gdb-format 4xw 0xbffff3c0(gdb) x/4xw 0xbffff3c0Read memory starting at the expression "argv[0]".(lldb) memory read `argv[0]`
NOTE:any command can inline a scalar expression result (as long as the target is stopped) using backticks around any expression:
(lldb)memory read --size `sizeof(int)` `argv[0]`(gdb) x argv[0]Read 512 bytes of memory from address 0xbffff3c0 and save results to a local file as text.(lldb) memory read --outfile /tmp/mem.txt --count 512 0xbffff3c0
(lldb)me r -o/tmp/mem.txt -c512 0xbffff3c0
(lldb)x/512bx -o/tmp/mem.txt 0xbffff3c0(gdb) set logging on
(gdb)set logging file /tmp/mem.txt
(gdb)x/512bx 0xbffff3c0
(gdb)set logging offSave binary memory data starting at 0x1000 and ending at 0x2000 to a file.(lldb) memory read --outfile /tmp/mem.bin --binary 0x1000 0x1200
(lldb)me r -o /tmp/mem.bin -b 0x1000 0x1200(gdb) dump memory /tmp/mem.bin 0x1000 0x2000Disassemble the current function for the current frame.(lldb) disassemble --frame
(lldb)di -f(gdb) disassembleDisassemble any functions named main.(lldb) disassemble --name main
(lldb)di -n main(gdb) disassemble mainDisassemble an address range.(lldb) disassemble --start-address 0x1eb8 --end-address 0x1ec3
(lldb)di -s 0x1eb8 -e 0x1ec3(gdb) disassemble 0x1eb8 0x1ec3Disassemble 20 instructions from a given address.(lldb) disassemble --start-address 0x1eb8 --count 20
(lldb)di -s 0x1eb8 -c 20(gdb) x/20i 0x1eb8Show mixed source and disassembly for the current function for the current frame.(lldb) disassemble --frame --mixed
(lldb)di -f -mn/aDisassemble the current function for the current frame and show the opcode bytes.(lldb) disassemble --frame --bytes
(lldb)di -f -bn/aDisassemble the current source line for the current frame.(lldb) disassemble --line
(lldb)di -ln/a
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(gdb)
(lldb)
LLDB now supports the GDB shorthand format syntax but there can't be space after the command:
(lldb)
(lldb)
(lldb)
LLDB now supports the GDB shorthand format syntax but there can't be space after the command:
(lldb)
(lldb)
(lldb)
(lldb)
LLDB now supports the GDB shorthand format syntax but there can't be space after the command:
(lldb)
(lldb)
(lldb)
NOTE:
(lldb)
(lldb)
(lldb)
(gdb)
(gdb)
(gdb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
(lldb)
EXECUTABLE AND SHARED LIBRARY QUERY COMMANDS
LLDBGDBList the main executable and all dependent shared libraries.(lldb) image list(gdb) info sharedLookup information for a raw address in the executable or any shared libraries.(lldb) image lookup --address 0x1ec4
(lldb)im loo -a 0x1ec4(gdb) info symbol 0x1ec4Lookup information for an address in a.out only.(lldb) image lookup --address 0x1ec4 a.out
(lldb)im loo -a 0x1ec4 a.out Lookup information for for a type by name.(lldb) image lookup --type Point
(lldb)im loo -t Point(lldb) ptype PointDump all sections from the main executable and any shared libraries.(lldb) image dump sections(gdb) maintenance info sectionsDump all sections in the a.out module.(lldb) image dump sections a.out Dump all symbols from the main executable and any shared libraries.(lldb) image dump symtab Dump all symbols in a.out and liba.so.(lldb) image dump symtab a.out liba.so
(lldb)
(lldb)
Point
(lldb)
MISCELLANEOUS
LLDBGDBEcho text to the screen.(lldb) 0 0
- lldb VS gdb
- LLDB vs GDB
- LLDB vs GDB
- LLDB vs GDB
- lldb vs gdb 命令对比
- LLDB和GDB比较
- gdb(lldb)调试器
- gdb/lldb 使用
- GDB/LLDB调试指令
- lldb/gdb remote protocol
- LLDB和GDB的区别
- xcode gdb/lldb调试命令
- XCode gdb/lldb 调试命令
- GDB TO LLDB COMMAND MAP
- xcode gdb/lldb调试命令
- xcode gdb/lldb调试命令
- xcode gdb/lldb调试命令
- lldb与gdb命令比较
- 魔法(csdn编程挑战)
- 从输入 URL 到页面加载完的过程
- C++ 删除一个文件目录下的所有文件以及目录
- 录音mic占用,录音异常
- 学习了
- LLDB vs GDB
- Oracle
- JSP 指令
- 数据库设计原则
- jasperreports5之后JRHtmlExporter过时
- Java内存模型
- maven搭建spring mvc+ibatis项目
- 初识高德地图API
- Rtsp发送ANNOUNCE到Darwin时,RTSP/1.0 401 Unauthorized