xcode之debugger

这些年被我们玩坏的Xcode -- Xcode debug area 的 debugger command 使用 Xcode debug area 要这么玩才对~~ 阅读详情

xcode4.0之前的debugger是GDB,xcode4.0 and up版本调试器Debugger是lldb。

  • GDB:

GDB(GNU symbolic debugger)是GNU开源组织发布的一个强大的UNIX下的程序调试工具。像所有的调试器一样,GDB可以让你调试一个程序,包括让程序在你希望的地方停下,此时 你可以查看变量,寄存器,内存及堆栈。更进一步你可以修改变量及内存值。GDB是一个功能很强大的调试器,它可以调试多种语言。在此我们仅涉及C和C++ 的调试,而不包括其它语言。

  • LLDB:

基于LLVM的 debugger,新一代高性能调试器,集成LLVM反编译器和Clang表达式解析器等高阶组件,用于C/C++ /Objective-C 程序的调试。

  • GDB VS LLDB 命令

EXECUTION COMMANDS

GDB LLDB
Launch a process no arguments.
(gdb) run
(gdb) r
(lldb) process launch
(lldb) run
(lldb) r
Launch a process with arguments <args>.
(gdb) run <args>
(gdb) r <args>
(lldb) process launch -- <args>
(lldb) r <args>
Launch a process for with arguments a.out 1 2 3 without having to supply the args every time.
% gdb --args a.out 1 2 3
(gdb) run
...
(gdb) run
...
% lldb -- a.out 1 2 3
(lldb) run
...
(lldb) run
...
Or:
(gdb) set args 1 2 3
(gdb) run
...
(gdb) run
...
(lldb) settings set target.run-args 1 2 3
(lldb) run
...
(lldb) run
...
Launch a process with arguments in new terminal window (Mac OS X only).

(lldb) process launch --tty -- <args>
(lldb) pro la -t -- <args>
Launch a process with arguments in existing terminal /dev/ttys006 (Mac OS X only).

(lldb) process launch --tty=/dev/ttys006 -- <args>
(lldb) pro la -t/dev/ttys006 -- <args>
Set environment variables for process before launching.
(gdb) set env DEBUG 1
(lldb) settings set target.env-vars DEBUG=1
(lldb) set se target.env-vars DEBUG=1
(lldb) env DEBUG=1
Unset environment variables for process before launching.
(gdb) unset env DEBUG
(lldb) settings remove target.env-vars DEBUG
(lldb) set rem target.env-vars DEBUG
Show the arguments that will be or were passed to the program when run.
(gdb) show args
Argument list to give program being debugged when it is started is "1 2 3".
(lldb) settings show target.run-args
target.run-args (array of strings) =
[0]: "1"
[1]: "2"
[2]: "3"
Set environment variables for process and launch process in one command.

(lldb) process launch -v DEBUG=1
Attach to a process with process ID 123.
(gdb) attach 123 (lldb) process attach --pid 123
(lldb) attach -p 123
Attach to a process named "a.out".
(gdb) attach a.out (lldb) process attach --name a.out
(lldb) pro at -n a.out
Wait for a process named "a.out" to launch and attach.
(gdb) attach -waitfor a.out (lldb) process attach --name a.out --waitfor
(lldb) pro at -n a.out -w
Attach to a remote gdb protocol server running on system "eorgadd", port 8000.
(gdb) target remote eorgadd:8000 (lldb) gdb-remote eorgadd:8000
Attach to a remote gdb protocol server running on the local system, port 8000.
(gdb) target remote localhost:8000 (lldb) gdb-remote 8000
Attach to a Darwin kernel in kdp mode on system "eorgadd".
(gdb) kdp-reattach eorgadd (lldb) kdp-remote eorgadd
Do a source level single step in the currently selected thread.
(gdb) step
(gdb) s
(lldb) thread step-in
(lldb) step
(lldb) s
Do a source level single step over in the currently selected thread.
(gdb) next
(gdb) n
(lldb) thread step-over
(lldb) next
(lldb) n
Do an instruction level single step in the currently selected thread.
(gdb) stepi
(gdb) si
(lldb) thread step-inst
(lldb) si
Do an instruction level single step over in the currently selected thread.
(gdb) nexti
(gdb) ni
(lldb) thread step-inst-over
(lldb) ni
Step out of the currently selected frame.
(gdb) finish
(lldb) thread step-out
(lldb) finish
Return immediately from the currently selected frame, with an optional return value.
(gdb) return <RETURN EXPRESSION>
(lldb) thread return <RETURN EXPRESSION>
Backtrace and disassemble every time you stop.

(lldb) target stop-hook add
Enter your stop hook command(s). Type 'DONE' to end.
> bt
> disassemble --pc
> DONE
Stop hook #1 added.

BREAKPOINT COMMANDS

GDB LLDB
Set a breakpoint at all functions named main.
(gdb) break main (lldb) breakpoint set --name main
(lldb) br s -n main
(lldb) b main
Set a breakpoint in file test.c at line 12.
(gdb) break test.c:12 (lldb) breakpoint set --file test.c --line 12
(lldb) br s -f test.c -l 12
(lldb) b test.c:12
Set a breakpoint at all C++ methods whose basename is main.
(gdb) break main
(Hope that there are no C funtions named main).
(lldb) breakpoint set --method main
(lldb) br s -M main
Set a breakpoint at and object C function: -[NSString stringWithFormat:].
(gdb) break -[NSString stringWithFormat:]
(lldb) breakpoint set --name "-[NSString stringWithFormat:]"
(lldb) b -[NSString stringWithFormat:]
Set a breakpoint at all Objective C methods whose selector is count.
(gdb) break count
(Hope that there are no C or C++ funtions namedcount).
(lldb) breakpoint set --selector count
(lldb) br s -S count
Set a breakpoint by regular expression on function name.
(gdb) rbreak regular-expression
(lldb) breakpoint set --func-regex regular-expression
(lldb) br s -r regular-expression
Ensure that breakpoints by file and line work for #included .c/.cpp/.m files.
(gdb) b foo.c:12
(lldb) settings set target.inline-breakpoint-strategy always
(lldb) br s -f foo.c -l 12
Set a breakpoint by regular expression on source file contents.
(gdb) shell grep -e -n pattern source-file
(gdb) break source-file:CopyLineNumbers
(lldb) breakpoint set --source-pattern regular-expression --file SourceFile
(lldb) br s -p regular-expression -f file
Set a conditional breakpoint
(gdb) break foo if strcmp(y,"hello") == 0
(lldb) breakpoint set --name foo --condition '(int)strcmp(y,"hello") == 0'
(lldb) br s -n foo -c '(int)strcmp(y,"hello") == 0'
List all breakpoints.
(gdb) info break
(lldb) breakpoint list
(lldb) br l
Delete a breakpoint.
(gdb) delete 1
(lldb) breakpoint delete 1
(lldb) br del 1

WATCHPOINT COMMANDS

GDB LLDB
Set a watchpoint on a variable when it is written to.
(gdb) watch global_var (lldb) watchpoint set variable global_var
(lldb) wa s v global_var
Set 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.
(gdb) watch -location g_char_ptr (lldb) watchpoint set expression -- my_ptr
(lldb) wa s e -- my_ptr
Set a condition on a watchpoint.

(lldb) watch set var 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 = 5
List all watchpoints.
(gdb) info break
(lldb) watchpoint list
(lldb) watch l
Delete a watchpoint.
(gdb) delete 1
(lldb) watchpoint delete 1
(lldb) watch del 1

EXAMINING VARIABLES

GDB LLDB
Show the arguments and local variables for the current frame.
(gdb) info args
and
(gdb) info locals
(lldb) frame variable
(lldb) fr v
Show the local variables for the current frame.
(gdb) info locals
(lldb) frame variable --no-args
(lldb) fr v -a
Show the contents of local variable "bar".
(gdb) p bar
(lldb) frame variable bar 
(lldb) fr v bar 
(lldb) p bar 
Show the contents of local variable "bar" formatted as hex.
(gdb) p/x bar
(lldb) frame variable --format x bar 
(lldb) fr v -f x bar 
Show the contents of global variable "baz".
(gdb) p baz
(lldb) target variable baz 
(lldb) ta v baz 
Show the global/static variables defined in the current source file.
n/a
(lldb) target variable 
(lldb) ta v 
Display a the variable "argc" and "argv" every time you stop.
(gdb) display argc
(gdb) display argv
(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
Display 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"

EVALUATING EXPRESSIONS

GDB LLDB
Evaluating a generalized expression in the current frame.
(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)
(lldb) expr (int) printf ("Print nine: %d.", 4 + 5)
or using the print alias:
(lldb) print (int) printf ("Print nine: %d.", 4 + 5)
Creating and assigning a value to a convenience variable.
(gdb) set $foo = 5
(gdb) set variable $foo = 5
or using the print command 
(gdb) print $foo = 5
or using the call command 
(gdb) call $foo = 5
and if you want to specify the type of the variable:(gdb) set $foo = (unsigned int) 5
In lldb you evaluate a variable declaration expression as you would write it in C:
(lldb) expr unsigned int $foo = 5
Printing the ObjC "description" of an object.
(gdb) po [SomeClass returnAnObject]
(lldb) expr -o -- [SomeClass returnAnObject]
or using the po alias:
(lldb) po [SomeClass returnAnObject]
Print the dynamic type of the result of an expression.
(gdb) set print object 1
(gdb) p someCPPObjectPtrOrReference
only works for C++ objects.
(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
Calling a function so you can stop at a breakpoint in the function.
(gdb) set unwindonsignal 0
(gdb) p function_with_a_breakpoint()
(lldb) expr -i 0 -- function_with_a_breakpoint()
Calling a function that crashes, and stopping when the function crashes.
(gdb) set unwindonsignal 0
(gdb) p function_which_crashes()
(lldb) expr -u 0 -- function_which_crashes()

EXAMINING THREAD STATE

GDB LLDB
Show the stack backtrace for the current thread.
(gdb) bt
(lldb) thread backtrace
(lldb) bt
Show the stack backtraces for all threads.
(gdb) thread apply all bt (lldb) thread backtrace all
(lldb) bt all
Backtrace the first five frames of the current thread.
(gdb) bt 5 (lldb) thread backtrace -c 5
(lldb) bt 5 (lldb-169 and later)
(lldb) bt -c 5 (lldb-168 and earlier)
Select a different stack frame by index for the current thread.
(gdb) frame 12 (lldb) frame select 12
(lldb) fr s 12
(lldb) f 12
List information about the currently selected frame in the current thread.

(lldb) frame info
Select the stack frame that called the current stack frame.
(gdb) up (lldb) up
(lldb) frame select --relative=1
Select the stack frame that is called by the current stack frame.
(gdb) down (lldb) down
(lldb) frame select --relative=-1
(lldb) fr s -r-1
Select a different stack frame using a relative offset.
(gdb) up 2
(gdb) down 3
(lldb) frame select --relative 2
(lldb) fr s -r2

(lldb) frame select --relative -3
(lldb) fr s -r-3
Show the general purpose registers for the current thread.
(gdb) info registers
(lldb) register read
Write a new decimal value '123' to the current thread register 'rax'.
(gdb) p $rax = 123
(lldb) register write rax 123
Skip 8 bytes ahead of the current program counter (instruction pointer). Note that we use backticks to evaluate an expression and insert the scalar result in LLDB.
(gdb) jump *$pc+8
(lldb) register write pc `$pc+8`
Show 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.
(gdb) info all-registers
(lldb) register read --all
(lldb) re r -a
Show the values for the registers named "rax", "rsp" and "rbp" in the current thread.
(gdb) info all-registers rax rsp rbp
(lldb) register read rax rsp rbp
Show the values for the register named "rax" in the current thread formatted as binary.
(gdb) p/t $rax
(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
Read memory from address 0xbffff3c0 and show 4 hex uint32_t values.
(gdb) x/4xw 0xbffff3c0
(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
Read memory starting at the expression "argv[0]".
(gdb) x 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]`
Read 512 bytes of memory from address 0xbffff3c0 and save results to a local file as text.
(gdb) set logging on
(gdb) set logging file /tmp/mem.txt
(gdb) x/512bx 0xbffff3c0
(gdb) set logging off
(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
Save binary memory data starting at 0x1000 and ending at 0x2000 to a file.
(gdb) dump memory /tmp/mem.bin 0x1000 0x2000 (lldb) memory read --outfile /tmp/mem.bin --binary 0x1000 0x2000
(lldb) me r -o /tmp/mem.bin -b 0x1000 0x2000
Get information about a specific heap allocation (available on Mac OS X only).
(gdb) info malloc 0x10010d680 (lldb) command script import lldb.macosx.heap
(lldb) process launch --environment MallocStackLogging=1 -- [ARGS]
(lldb) malloc_info --stack-history 0x10010d680
Get information about a specific heap allocation and cast the result to any dynamic type that can be deduced (available on Mac OS X only)

(lldb) command script import lldb.macosx.heap
(lldb) malloc_info --type 0x10010d680
Find all heap blocks that contain a pointer specified by an expression EXPR (available on Mac OS X only).

(lldb) command script import lldb.macosx.heap
(lldb) ptr_refs EXPR 
Find all heap blocks that contain a C string anywhere in the block (available on Mac OS X only).

(lldb) command script import lldb.macosx.heap
(lldb) cstr_refs CSTRING
Disassemble the current function for the current frame.
(gdb) disassemble (lldb) disassemble --frame
(lldb) di -f
Disassemble any functions named main.
(gdb) disassemble main (lldb) disassemble --name main
(lldb) di -n main
Disassemble an address range.
(gdb) disassemble 0x1eb8 0x1ec3 (lldb) disassemble --start-address 0x1eb8 --end-address 0x1ec3
(lldb) di -s 0x1eb8 -e 0x1ec3
Disassemble 20 instructions from a given address.
(gdb) x/20i 0x1eb8 (lldb) disassemble --start-address 0x1eb8 --count 20
(lldb) di -s 0x1eb8 -c 20
Show mixed source and disassembly for the current function for the current frame.
n/a (lldb) disassemble --frame --mixed
(lldb) di -f -m
Disassemble the current function for the current frame and show the opcode bytes.
n/a (lldb) disassemble --frame --bytes
(lldb) di -f -b
Disassemble the current source line for the current frame.
n/a (lldb) disassemble --line
(lldb) di -l

EXECUTABLE AND SHARED LIBRARY QUERY COMMANDS

GDB LLDB
List the main executable and all dependent shared libraries.
(gdb) info shared
(lldb) image list
Look up information for a raw address in the executable or any shared libraries.
(gdb) info symbol 0x1ec4
(lldb) image lookup --address 0x1ec4
(lldb) im loo -a 0x1ec4
Look up functions matching a regular expression in a binary.
(gdb) info function <FUNC_REGEX>
This one finds debug symbols:
(lldb) image lookup -r -n <FUNC_REGEX>

This one finds non-debug symbols:
(lldb) image lookup -r -s <FUNC_REGEX>

Provide a list of binaries as arguments to limit the search.
Find full souce line information.
(gdb) info line 0x1ec4
This one is a bit messy at present. Do:

(lldb) image lookup -v --address 0x1ec4

and look for the LineEntry line, which will have the full source path and line range information.
Look up information for an address in a.out only.

(lldb) image lookup --address 0x1ec4 a.out
(lldb) im loo -a 0x1ec4 a.out
Look up information for for a type Point by name.
(gdb) ptype Point
(lldb) image lookup --type Point
(lldb) im loo -t Point
Dump all sections from the main executable and any shared libraries.
(gdb) maintenance info sections
(lldb) image dump sections
Dump 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

MISCELLANEOUS

GDB

LLDB
Echo text to the screen.
(gdb) echo Here is some text\n
(lldb) script print "Here is some text"
Remap source file pathnames for the debug session. If your source files are no longer located in the same location as when the program was built --- maybe the program was built on a different computer --- you need to tell the debugger how to find the sources at their local file path instead of the build system's file path.
(gdb) set pathname-substitutions /buildbot/path /my/path
(lldb) settings set target.source-map /buildbot/path /my/path
Supply a catchall directory to search for source files in.
(gdb) directory /my/path
(No equivalent command - use the source-map instead.)

自学篇--使用keil5.23创建一个stm32工程并编译(固件包自带版本) 之前在本科学习阶段学习过一点51单片机的知识,可是因为基本没有实践过几次现在已经完全忘记了。。前几天老师突然丢给我几个板子说让我把程序编译、烧写环境装好,当时我就震惊了,不过经过三四天的自我摸索,之后参考他人的学习经验,现在已经基本能处理这个问题了,所以为了方便后面的学者,主要也是为了把自己这几天的学习成果记录一下,我在这里把这个过程写下来。(因为刚刚接触,很多原理性的东西都还不懂,只是一个操作步 阅读详情

相关推荐

基于Simulink的输入-输出线性化精确转矩控制

本文详细介绍了基于Simulink的永磁同步电机(PMSM)输入-输出线性化(IOL)精确转矩控制方法。针对传统解耦控制在非线性转矩特性下的局限性,通过建立PMSM非线性状态空间模型,设计IOL控制器将系统转化为线性输入-输出映射。文章包含系统原理推导、Simulink建模步骤、参数整定方法和仿真结果分析,验证了IOL在高动态、宽速域工况下的优越性能(转矩误差降低90%)。最后提出了工程实现要点和扩展应用方向,为开发高精度电机驱动系统提供了实用指导。

xiaoheshang_123的博客 281

iOS开发之Xcode常用调试(Debug)技巧

一、Xcode 调试技巧之:NSLog2、Xcode调试技巧之:LLDB三、Xcode调试技巧之:断点调试(breakpoint)3.1 Breakpoint(断点)调试(1) Name 和 Condition(2) Ignore(3) action6.Sound参考资料。

yunfeihope的博客 8443

小红书x-s参数逆向分析

小红书作为一款广受欢迎的生活方式分享平台,其客户端在运行过程中会涉及到各种参数,而这些参数往往是动态生成的。在软件开发和网络安全领域,逆向工程技术常常被用来分析和理解软件的工作机制,包括参数生成和传递的方式。小红书x-s参数逆向分析,就是指对小红书应用中某种特定参数(假设为x-s)进行逆向工程的研究,目的是为了理解和还原小红书的补环境源码,从而进一步分析小红书应用程序的工作机制和安全特性。逆向工程涉及的核心过程包括但不限于分析小红书应用的网络通信过程,抓取应用与服务器之间的通信数据包,并对数据包内容进行解析。这通常需要深入研究小红书应用的协议,比如其使用的HTTP/HTTPS协议以及对应的加密和签名机制。通过逆向分析,开发者可能会发现一些重要的线索,例如x-s参数在安全性和身份验证方面所起的作用。这有助于理解小红书是如何通过客户端发送的x-s参数来与服务器进行安全通信的。在此基础上,研究者可能需要对小红书应用的客户端代码进行反编译,并借助静态代码分析工具或者动态调试手段,探索x-s参数在程序中的生成和使用过程。整个分析过程需要有扎实的编程基础,熟悉加密算法,了解网络协议,以及具备逆向工程的相关经验。逆向工程通常也涉及到法律和道德的问题。由于小红书是一个商业产品,其代码和通信机制都属于公司的知识产权,未经允许进行逆向分析可能会违反相关的法律法规,因此这类研究活动在没有合适授权的情况下进行是不被鼓励的,也可能面临法律风险。小红书x-s参数的逆向分析对于理解应用的安全机制、数据加密和身份验证流程至关重要,对于提升安全研究人员的安全防护能力、学习先进的加密技术和协议设计原理也具有重要的意义。同时,这项工作对于那些希望开发与小红书兼容的第三方插件或服务的开发者来说,能够提供深入的技术支持和数据交互的参考。此外,逆向分析工作不仅限于x-s参数,还可能涵盖对整个小红书应用的逆向研究,包括但不限于用户认证流程、内容分发机制、广告加载逻辑等多个方面。每一个参数或功能的逆向分析结果,都可能成为提升用户体验、优化应用性能或防范潜在安全威胁的重要依据。对于安全研究人员来说,掌握逆向工程技能并将其应用于实际案例中,可以极大地提高其对软件漏洞发现和修复的能力,同时也是对自身技术深度和广度

当程序崩溃的时候怎么办

转自:http://article.ityran.com/archives/1006 有这样一种情形:当我们正在快乐的致力于我们的app时,并且什么看都是无比顺利,但是突然,坑爹啊,它崩溃了。(悲伤地音乐响起) 我们需要做的第一件事就是:不要惊慌。 修复崩溃不是很困难的。假如你崩溃了,并且胡乱的改些东西,而且还在不停的念着咒语希望bug神奇的自动消失,你大多数情况下都会使

963

使用XCode调试,笔记

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33989780的博客 155

iOS开发之Xcode常用调试(Debug)技巧总结

最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题。平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼。Debug的技巧很多,比如最常见的方式是打个Log,在一些工程中处处可见NSLog。还有就是打断点的Debug方式等。诸如此类,下面就自己在开发过程中常用的Xcode调试技巧简单的做个总结。 一、Xcode调试技巧之:NSLog上面也提到了,在我们日常的开发过程中最常见的De

Spencer Yang的博客 2182

Xcode使用&调试技巧(debugging)

本文分为 使用技巧 面包屑导航 批量Rename 快速查看文档 代码折叠 调试技巧(debugging) 日志打印(log) 断点调试(Breakpoint) 条件断点(conditional BreakPoint) UI层级(UI Hierarchy) 内存层级(Memory Graph Hierarchy) 使用技巧 面包屑导航 批量Rename 快速查看文档 代码折叠 面包屑导航 点击导航栏面包屑可以快速点位到该文件代码中的某部分,有助于快速找到文件中的变量或者...

梅逊雪——记录科学研究 3496

XCode Debugger中的Icon符号的意义

你注意到了吗?在Xcode中,当你点击查看调用栈的时候,调用栈的每个方法前面都有一个Icon,而且还有好几种不同的样子,如下图所示,你知道它们代表什么意思吗? 其实它们代表的意义如下: Person icon is User Mug icon is AppKit (or UIKit) Briefcase icon is Frameworks Gear icon is

万事皆有可能 1465

转载---XCode Debugger中的Icon符号的意义

XCode Debugger中的Icon符号的意义

zimbean 919

突破视图层级迷雾:PlayCover Xcode View Debugger实战指南

在macOS应用开发中,复杂的用户界面(UI)往往由多层视图嵌套而成。PlayCover作为一款社区开发的应用,其视图结构同样具有一定的复杂性。理解和调试这些视图层级对于开发人员来说至关重要,它可以帮助我们: - 快速定位UI布局问题 - 优化界面渲染性能 - 理解应用的整体架构 Xcode提供的View Debugger是一个强大的工具,能够直观地展示应用的视图层级结构。本文将以PlayCo...

gitblog_01047的博客 422

Xcode——LLDB Debugger 与断点调试学习

在前几日完成知乎日报项目的过程之中,运行调试是在写项目过程之中最头疼的事情,偶然看到隔壁的倪神在学习与LLDB相关的BUG调试的内容,于是就对LLDB进行学习了解LLDB 是 Apple 提供的一个强大且现代化的调试工具,主要用于调试 macOS 和 iOS 应用程序。它是 Xcode 默认的调试器,具有高效、快速的特点,支持多种编程语言,包括 Objective-C、Swift 和 C/C++。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。

aa2002aa的博客 1983

SwiftMessages视图调试终极指南:Xcode View Debugger高效使用技巧

SwiftMessages是一个功能强大的iOS消息提示库,能够显示和管理各种样式的消息提示,包括Toast、Snackbar、Floating等。在开发过程中,视图调试是确保消息显示效果完美的关键环节。本指南将为您介绍如何使用Xcode View Debugger来优化SwiftMessages的使用体验。 ## 🎯 为什么需要视图调试? 在iOS开发中,消息提示的显示效果直接影响用户体验

gitblog_00712的博客 946

xcode debugger的坑

使用debugger打印网络json数据时经常会显示no summary,本以为没存进来,结果上网查了加调试才发现是debugger的bug。。。。。。。 以后调试还是要多在控制台po一下,不然容易被坑

lht898000123的博客 1474

XCode9: iPhone is busy: Preparing debugger support for iPhone

XCode9: iPhone is busy: Preparing debugger support for iPhone Click on Window menu Select Device and Simulators Select your device Click on + button at bottom left corner Click Next Click Done

jianghai的博客 7363

Xcode 调试(转载)

有这样一种情形:当我们正在快乐的致力于我们的app时,并且什么看都是无比顺利,但是突然,坑爹啊,它崩溃了。(悲伤地音乐响起) 我们需要做的第一件事就是:不要惊慌。 修复崩溃不是很困难的。假如你崩溃了,并且胡乱的改些东西,而且还在不停的念着咒语希望bug神奇的自动消失,你大多数情况下都会使情况更麻烦。相反的,你需要知道一些系统的方法,并且学习怎么找到崩溃和他的原因。

akka123的专栏 599

Xcode 调试方法总结

前言:编写代码过程中出现错误、异常是不可避免的。通常我们都需要进行大量的调试去寻找、解决问题。这时,熟练掌握调试技巧将很大程度上的提高工作效率。接下来就说说开发过程中Xcode的调试方法。

jamalping的专栏 1万+

Xcode Debug

Xcode Debug 官方文档: Debugging with Xcode 参考文章: My App Crashed, Now What? – Part 1 My App Crashed, Now What? – Part 2 Intermediate Debugging with Xcode 8 记录一下学习要点,虽然有的教程已经很老了,但还是很有借鉴意义 基本上有2种类型...

了凡 1629

8. Xcode 工程文件解析

引子在「Molinillo 依赖校验」通过后,CocoaPods 会根据确定的 PodSpec 下载对应的源代码和资源,并为每个 PodSpec 生成对应的 Xcode Target。本文...

Desgard_Duan 1407

远程Debug Java进程的方法

原文地址 远程debug的意思是启动一个Java进程,启动一个debugger进程,将两者连接起来,利用debugger来debug Java进程。 事实上目前所有的IDE的debug功能都是通过远程debug方式来实现的,它们都利用了一个叫做JDPA(Java Platform Debugger Architecture)的技术。 利用...

weixin_33826268的博客 569

安装debugserver到iPhone上

1、不喜欢使用命令行的小伙伴,可以选择  iFunBox  或者其他的 工具查看文件目录。 2、注意:在使用ldid对 debugserver签名的时候,键入命令: ldid -Sentitlement.xml debugserver   命令中 -S 与 entitlement.xml之间没有空格。 文章出处:http://bbs.pediy.com/showthread.php

知其所以然 4892
上一篇: xcode之编译器
下一篇: xcode之breakpoint
qiummm
博客等级 码龄18年 83粉丝 74原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值