zoukankan      html  css  js  c++  java
  • Xcode的控制台调试命令

    XCode4.0以后,编译器换成了LLVM 编译器 2.0

    与以前相比,更加强大:
    1.LLVM 编译器是下一带开源的编译技术.完全支持C, Objective-C, 和 C++.
    2.LLVM 速度比 GCC快两倍,建立的程序也会运行的更快. 因为它更好的利用现代的芯片的结构.
    3.LLVM和Xcode 4完全的整合在一起.包括关键字高亮,代码完整性等全都是由LLVM语法分析器来分析的. 这样可以在编辑的时候就可以很好的了解你的代码.

    编译器进化之后,控制台调试命令前缀,也由原来的gdb更改成了lldb,所以当你看到控制台没有gdb而出现lldb的时候,不用惊慌,因为我们以前常用的调试命令依然可以使用:

    使用前提:

    1.既然是调试命令,理所当然的,程序模式应该选择Debug模式。

    2.在Debug模式下,如果你的程序在运行中崩溃(Crash)掉,那么恭喜你,使用lldb调试的机会来了。

    符合以上两个条件之后,控制台(即日志输出窗口All Output)会自动打出一个(lldb)命令,你在其后输入bt,回车。

    恭喜你,这时Xcode会自动输出最后的一次调用堆栈。如下:


     
    1. thread #1: tid = 0x1f03, 0x0132edee CoreFoundation`___forwarding___ + 206, stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)  
    2.     frame #0: 0x0132edee CoreFoundation`___forwarding___ + 206  
    3.     frame #1: 0x0132ecb2 CoreFoundation`_CF_forwarding_prep_0 + 50  
    4.     frame #2: 0x00002e60 testMVC`-[ViewCtrl2 touchesBegan:withEvent:] + 128 at ViewCtrl2.m:40  
    5.     frame #3: 0x013c9e99 CoreFoundation`-[NSObject performSelector:withObject:withObject:] + 73  
    6.     frame #4: 0x000ffc49 UIKit`forwardTouchMethod + 268  
    7.     frame #5: 0x000ffb38 UIKit`-[UIResponder touchesBegan:withEvent:] + 30  
    8.     frame #6: 0x0003a2cf UIKit`-[UIWindow _sendTouchesForEvent:] + 272  
    9.     frame #7: 0x0003a5e6 UIKit`-[UIWindow sendEvent:] + 273  
    10.     frame #8: 0x00020dc4 UIKit`-[UIApplication sendEvent:] + 464  
    11.     frame #9: 0x00014634 UIKit`_UIApplicationHandleEvent + 8196  
    12.     frame #10: 0x012b2ef5 GraphicsServices`PurpleEventCallback + 1274  
    13.     frame #11: 0x0139c195 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53  
    14.     frame #12: 0x01300ff2 CoreFoundation`__CFRunLoopDoSource1 + 146  
    15.     frame #13: 0x012ff8da CoreFoundation`__CFRunLoopRun + 2218  
    16.     frame #14: 0x012fed84 CoreFoundation`CFRunLoopRunSpecific + 212  
    17.     frame #15: 0x012fec9b CoreFoundation`CFRunLoopRunInMode + 123  
    18.     frame #16: 0x012b17d8 GraphicsServices`GSEventRunModal + 190  
    19.     frame #17: 0x012b188a GraphicsServices`GSEventRun + 103  
    20.     frame #18: 0x00012626 UIKit`UIApplicationMain + 1163  
    21.     frame #19: 0x000026fa testMVC`main + 170 at main.m:16  
    22.     frame #20: 0x00002645 testMVC`start + 53  


    当然还有其他的命令(和gdb命令通用):


     
    1. 命令                        解释    
    2. break NUM               在指定的行上设置断点。    
    3. bt                      显示所有的调用栈帧。该命令可用来显示函数的调用顺序。    
    4. clear                   删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。    
    5. continue                继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。    
    6. display EXPR            每次程序停止后显示表达式的值。表达式由程序定义的变量组成。    
    7. file FILE               装载指定的可执行文件进行调试。    
    8. help NAME               显示指定命令的帮助信息。    
    9. info break              显示当前断点清单,包括到达断点处的次数等。    
    10. info files              显示被调试文件的详细信息。    
    11. info func               显示所有的函数名称。    
    12. info local              显示当函数中的局部变量信息。    
    13. info prog               显示被调试程序的执行状态。    
    14. info var                显示所有的全局和静态变量名称。    
    15. kill                    终止正被调试的程序。    
    16. list                    显示源代码段。    
    17. make                    在不退出 gdb 的情况下运行 make 工具。    
    18. next                    在不单步执行进入其他函数的情况下,向前执行一行源代码。    
    19. print EXPR              显示表达式 EXPR 的值。     
    20. print-object            打印一个对象    
    21. print (int) name      打印一个类型    
    22. print-object [artist description]   调用一个函数    
    23. set artist = @"test"    设置变量值    
    24. whatis                  查看变理的数据类型   

    Debugger commands:

      apropos           -- Find a list of debugger commands related to a particular

                           word/subject.

      breakpoint        -- A set of commands for operating on breakpoints. Also see

                           _regexp-break.

      command           -- A set of commands for managing or customizing the

                           debugger commands.

      disassemble       -- Disassemble bytes in the current function, or elsewhere

                           in the executable program as specified by the user.

      expression        -- Evaluate an expression (ObjC++ or Swift) in the current

                           program context, using user defined variables and

                           variables currently in scope.

      frame             -- A set of commands for operating on the current thread's

                           frames.

      gdb-remote        -- Connect to a remote GDB server.  If no hostname is

                           provided, localhost is assumed.

      gui               -- Switch into the curses based GUI mode.

      help              -- Show a list of all debugger commands, or give details

                           about specific commands.

      kdp-remote        -- Connect to a remote KDP server.  udp port 41139 is the

                           default port number.

      log               -- A set of commands for operating on logs.

      memory            -- A set of commands for operating on memory.

      platform          -- A set of commands to manage and create platforms.

      plugin            -- A set of commands for managing or customizing plugin

                           commands.

      process           -- A set of commands for operating on a process.

      quit              -- Quit out of the LLDB debugger.

      register          -- A set of commands to access thread registers.

      script            -- Pass an expression to the script interpreter for

                           evaluation and return the results. Drop into the

                           interactive interpreter if no expression is given.

      settings          -- A set of commands for manipulating internal settable

                           debugger variables.

      source            -- A set of commands for accessing source file information

      target            -- A set of commands for operating on debugger targets.

      thread            -- A set of commands for operating on one or more threads

                           within a running process.

      type              -- A set of commands for operating on the type system

      version           -- Show version of LLDB debugger.

      watchpoint        -- A set of commands for operating on watchpoints.

    Current command abbreviations (type 'help command alias' for more info):

      add-dsym  -- ('target symbols add')  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    -- ('_regexp-attach')  Attach to a process id if in decimal,

                   otherwise treat the argument as a process name to attach to.

      b         -- ('_regexp-break')  Set a breakpoint using a regular expression

                   to specify the location, where <linenum> is in decimal and

                   <address> is in hex.

      bt        -- ('_regexp-bt')  Show a backtrace.  An optional argument is

                   accepted; if that argument is a number, it specifies the number

                   of frames to display.  If that argument is 'all', full

                   backtraces of all threads are displayed.

      c         -- ('process continue')  Continue execution of all threads in the

                   current process.

      call      -- ('expression --')  Evaluate an expression (ObjC++ or Swift) in

                   the current program context, using user defined variables and

                   variables currently in scope.

      continue  -- ('process continue')  Continue execution of all threads in the

                   current process.

      detach    -- ('process detach')  Detach from the current process being

                   debugged.

      di        -- ('disassemble')  Disassemble bytes in the current function, or

                   elsewhere in the executable program as specified by the user.

      dis       -- ('disassemble')  Disassemble bytes in the current function, or

                   elsewhere in the executable program as specified by the user.

      display   -- ('_regexp-display')  Add an expression evaluation stop-hook.

      down      -- ('_regexp-down')  Go down "n" frames in the stack (1 frame by

                   default).

      env       -- ('_regexp-env')  Implements a shortcut to viewing and setting

                   environment variables.

      exit      -- ('quit')  Quit out of the LLDB debugger.

      f         -- ('frame select')  Select a frame by index from within the

                   current thread and make it the current frame.

      file      -- ('target create')  Create a target using the argument as the

                   main executable.

      finish    -- ('thread step-out')  Finish executing the function of the

                   currently selected frame and return to its call site in

                   specified thread (current thread, if none specified).

      image     -- ('target modules')  A set of commands for accessing information

                   for one or more target modules.

      j         -- ('_regexp-jump')  Sets the program counter to a new address.

      jump      -- ('_regexp-jump')  Sets the program counter to a new address.

      kill      -- ('process kill')  Terminate the current process being debugged.

      l         -- ('_regexp-list')  Implements the GDB 'list' command in all of

                   its forms except FILE:FUNCTION and maps them to the appropriate

                   'source list' commands.

      list      -- ('_regexp-list')  Implements the GDB 'list' command in all of

                   its forms except FILE:FUNCTION and maps them to the appropriate

                   'source list' commands.

      n         -- ('thread step-over')  Source level single step in specified

                   thread (current thread, if none specified), stepping over calls.

      next      -- ('thread step-over')  Source level single step in specified

                   thread (current thread, if none specified), stepping over calls.

      nexti     -- ('thread step-inst-over')  Single step one instruction in

                   specified thread (current thread, if none specified), stepping

                   over calls.

      ni        -- ('thread step-inst-over')  Single step one instruction in

                   specified thread (current thread, if none specified), stepping

                   over calls.

      p         -- ('expression --')  Evaluate an expression (ObjC++ or Swift) in

                   the current program context, using user defined variables and

                   variables currently in scope.

      po        -- ('expression -O  -- ')  Evaluate an expression (ObjC++ or Swift)

                   in the current program context, using user defined variables and

                   variables currently in scope.

      print     -- ('expression --')  Evaluate an expression (ObjC++ or Swift) in

                   the current program context, using user defined variables and

                   variables currently in scope.

      q         -- ('quit')  Quit out of the LLDB debugger.

      r         -- ('process launch -c /bin/sh --')  Launch the executable in the

                   debugger.

      rbreak    -- ('breakpoint set -r %1')  Sets a breakpoint or set of

                   breakpoints in the executable.

      repl      -- ('expression -r  -- ')  Evaluate an expression (ObjC++ or Swift)

                   in the current program context, using user defined variables and

                   variables currently in scope.

      run       -- ('process launch -c /bin/sh --')  Launch the executable in the

                   debugger.

      s         -- ('thread step-in')  Source level single step in specified thread

                   (current thread, if none specified).

      si        -- ('thread step-inst')  Single step one instruction in specified

                   thread (current thread, if none specified).

      step      -- ('thread step-in')  Source level single step in specified thread

                   (current thread, if none specified).

      stepi     -- ('thread step-inst')  Single step one instruction in specified

                   thread (current thread, if none specified).

      t         -- ('thread select')  Select a thread as the currently active

                   thread.

      tbreak    -- ('_regexp-tbreak')  Set a one shot breakpoint using a regular

                   expression to specify the location, where <linenum> is in

                   decimal and <address> is in hex.

      undisplay -- ('_regexp-undisplay')  Remove an expression evaluation

                   stop-hook.

      up        -- ('_regexp-up')  Go up "n" frames in the stack (1 frame by

                   default).

      x         -- ('memory read')  Read from the memory of the process being

                   debugged.

    For more information on any command, type 'help <command-name>'.



    使用lldb调试工具,实在是查找crash的一大利器啊,很是方便!

  • 相关阅读:
    python之面向对象
    python之异常处理
    python之函数的使用
    python之模块的使用
    python之循环语句
    python之文件操作
    初识Python
    python爬虫之request模块详解
    pikachu之文件上传
    pikachu靶场之暴力破解
  • 原文地址:https://www.cnblogs.com/tate-zwt/p/4417061.html
Copyright © 2011-2022 走看看