Nateguyver Breakpoints LLDB Debug Toolchain More
Total Page:16
File Type:pdf, Size:1020Kb
��������������������������� ��������������������������� �������� ����������������������������������������������������������������������������������� ���������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������� ������������������������������� ��������������������������������������������������������������������������������������� ����������������������������������������������������������������������� �������������������������������������������������������������������������������������� �������������������������������������������� ◼ Breakpoints & watchpoints ◼ Xcode's graphical debugger ◼ LLDB �������������� “ ������������������������������������������������������������������������������������ ��������������������������� ”������������������ ���������������������������� ◼ Assertions, Logging, and Debug configuration ◼ Static analysis & runtime memory tools ◼ Unit testing in xcode ���������������� ◼ Emphasis on LLDB as our debugging foundation ◼ Tips and tricks to stramline your the debuggin experience ◼ Use LLDB as an extensible investigative tool “�������������”������������ “��’���������������������������������������������������’���������������������’�������������� ��������’����������������������������������� ”������������������ ��������������������������������������������������� ���������������������������������������������������������������������������������� ���������������������������������������������������������������������������� ◼ The term debugging is widely attributed to U.S. Navy Admiral Grace Hopper, often called Amazing Grace. ������������������������������������������������������������������������������������� ����������������������������������������������������������������������������������� ����������������������������������������������������������������������������������� �������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������� �������������������������������������������������������������������������������������� ������������������������������������������������������������� ����������� “������������������������������������������������������������������������������������������� ����������������”������������������ ◼ Xcode provides two debuggers; the legacy GDB, part of GNU GCC project, and the newer LLDB, part of the LLVM project. �����������������������������������������������������������’�������������������������������� ������������������������������������������������������������������������������������������ �������������������������������������������������������������������������������������������� ����������������������� ������������������������������������� ����������������������������������’���������������������������������������������������������� ���������������������������������������������������������������������������������������������� ��������������������������������������� ��������������������������“�”���������� ������������������������ ����������������������������������������������� ����������������������������������������������� ���������������������������������� �������������������������������������������� ����������������������������������������������� ����������������������������������������������� �������������������������‘��������������’����‘������’��������������� ���������������������������������� ����� ������������������������������������������������������������������������������������������ ������������������������������ ��������������������������������������������������������������� ���������������������� �������������������������������������������������������� ������������������������������ ◼ Note the combined use of a set of nested method calls with a casted print statement, this yields a pretty-formatted rendition of the rect, making it easier to debug. ����������������� ◼ To add or remove a breakpoint: "Command + Backslash" (⌘\) ◼ To stop: “Command + Period” (⌘.) ◼ To pause/continue: “Command + Right” (⌘→) ◼ Continue to current line: “Command + Control + c” (⌘c) ◼ Risky bidness: try dragging instruction pointer! ◼ Set your own hotkeys... here are some more I find useful: + ����� ������������������������ +++� �����������/������� + �������������������� ++� ���������������� +� ���������������� +� ������������� ++] ������������ ++� ������������������� +� �������� +� ����������������� ++� ������������ ++� ���������������� +→← �������������������������� + ���������������������������������� +� ����������� +� ������������ +�/�/�/�/� �������������������� +� ������������� + ���� ��������������������������� ����������������������� ����������������������������������������������������������������������������������� �������������’�������������������������������������������������������������������������� ����������������������������� ������������������������ ������� ���������������������������������������������������������������������������������������� “�������”��������������������������� ◼ There are built-in lldb formatters for system libraries, STL, core-foundation ◼ There system is plug and play-able (more on this later...) ������������������������������������������������������������������������������������� ������������������������������������������������� ��������������� ��������������������������������������������������������������������������������������������� “������������”� �������������� ���������������������� ������������������������������������������������������������ ◼ Note “Step Over” maintains a stack, so when you step over a function with a breakpoint inside it, you can click continue to jump out. ����������������������� ����������������“���������������”����������������������������������������������� ������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������� ����������������������������������������������������� ����������������������������������������������������������������������������������������� ������������������������������������������������������������������������������� Gotcha: On using stringWithFormat ���������������������������������‘�������������������������������������’�������������� ��������������������������������������������������������������� ���������������������������������������������������������������� �����’�������������������������������������������������������������������������������� ������������������������������������������ ������������������������������������������������������������ ���������������������������������� ������������������������������������������������������������������’���������������������� ����������������� ��������������������������������������������������������������������������������� ������������������� �������������������������������������������������������������������� �������→������������������ Conditional Log ������“���”�������������������������������� ������������������������������������������� Set Breakpoints in Runtime ������“���”�������������������������������� ������������������������������������������������������ ��������������������� ������������������������������������������������������������������������������������ �����������������������������’��������������������������������������������������������������� ������������������������������������������������������������������������������������������ ����������������������������������������������������������������������������� ����������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������� ���������������������������������������’��������������������������������������������� ������������������������ ◼ used to break each time a new exception is raised. Common use, to catch uncaught exception: ** * ����������� ��� ��� �� �������� ���������’ ����������������’� ������ �’-[ __��������� ������������� �] � �����(��) ������ ������(�) ��������������������� ���������������������������������������’������������������������������������������ ������������������������������������������������������������������������������� ��������������� ◼ Symbolic breakpoints are useful when you want to stop in a piece of code that you don’t have source code for. Type 1: (class or instance) Methods with arguments ◼ Used to break on every call to a defined method: ���������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������ ������ �������������������������������������������������������������������������������� ������������� �������������“��������������������”������������������������������������� �������������������������������������������������������������������������������������� ������������������������������������“�������������������������������������”������������ ������������������������������������������������������������������������������������������� -[���������������� �����������] -[__��������� ������������� �] ���������������������������������������������������������������������������������������� ��������������������������������������������������������