SlideShare ist ein Scribd-Unternehmen logo
1 von 66
Downloaden Sie, um offline zu lesen
매력적인 Xcode 디버깅 팁
ARC, Instruments, DTrace
twitter.com/@godrmOSXDEV.org
오로라플래닛 김정
Single Window
Built-in Interface Builder
LLVM Compiler
LLDB Debugger
Fix-it & Live issue
Assistant
Version Editor
Navigators & Utilities
Multi-window & Multi-tab
Visual Connections (IB)
Refactor
Code Complete
New Instruments
Scheme
Workspace
Debugging
이미지 출처: http://www.dumpanalysis.org/debugging-story-annual-competition
Debugging Tip#1
Breakpoint action
Breakpoint Action
✴ Condition (조건)
✴ Ignore (무시할 반복회수)
✴ Action (동작)
✴ AppleScript, Capture OpenGL ES Frame, Debugger
Command, Log Message, Shell Command, Sound
✴ Options (선택사항)
Exception Breakpoint
✴ 프로젝트 전체 범위
✴ 예외(Exception) 발생할 경우
✴ C++ / Objective-C 형태 예외처리
✴ 동작 설정 가능
Symbolic Breakpoint
✴ 소스 코드의 심벌 이름에 설정
✴ [클래스 +] 메서드 형태 심벌 지정
✴ 모듈 (라이브러리) 지정
LLVM
osxdev.org
Introduction
• LLVM
- Low-Level Virtual Machine
• An Infrastructure for Multi-stage Optimization
- by Chris Arthur Lattner @2002
• Design and Implementation of a compiler infrastructure
- support a unique multi-stage optimization system
- support inter-procedural and profile-driven optimizations
• LLVM virtual instruction (IR)
- with high-level type information
• Sponsored by APPLE
osxdev.org
Compiler Architectures
GCC#4.2#
프론트엔드#
C"
Tree*SSA#
최적화기#
코드 생성기#C++"
Objec)ve+C"
실행파일"
GCC"4.2"
GCC#4.2#
프론트엔드#
C"
LLVM#
최적화기#
LLVM#
코드 생성기#
C++"
Objec)ve+C"
실행파일"
LLVM+GCC"4.2"
Clang#
프론트엔드#
C"
LLVM#
최적화기#
LLVM#
코드 생성기#
C++"
Objec)ve+C"
실행파일"
LLVM"
osxdev.org
Effective LLVM Projects
Xcode
OpenCL
OpenGL Optimize
(speed)
Optimize
(size)
Dynamic
Prog.
Clang
LLDB LLVM
Debugging Tip#2
Static Analysis
osxdev.org
잘못된 예제 코드
CFNumberRef CFNumberError(int param)
{
unsigned int i = 1;
bool isWork = NO;
CFNumberRef x = CFNumberCreate(0, kCFNumberLongType, &i);
if (param==0)
isWork = YES;
return x;
}
void leakError()
{
NSMutableString *aString = [NSMutableString stringWithCapacity:100];
[aString retain];
//...
NSMutableArray *aArray = [[NSMutableArray alloc] initWithCapacity:10];
//...
[aArray removeAllObjects];
//release
}
void NullDerefence(id object)
{
char* pChar = NULL;
///pChar pointer...
*pChar = '!';
}
int uninitialized(int x)
{
int result;
if (x>0) {
result = 1;
}
else if (x==0) {
result = 0;
}
return result;
}
잘못된 사용 (API Misuse)
죽은 코드 (Dead store)
죽은 코드 (Dead store)
잠재된 메모리 누수 (Potential Leak)
널 참조 (Null Dereference)
논리적 오류 (Logic Error)
Debugging Tip#3
ARC vs no-ARC
osxdev.org
ARC
• Automatic Reference Counting
- Automatic memory management of Objective-C objects
- Just Compile-time, Not Run-time
• Not Garbage-Collector
• Migration Tool in Xcode 4.2
- with LLVM 3.0
- build-settings : -fobjc-arc (cf. -fno-objc-arc)
• New Rules
- remove dealloc, retain/release/autorelease
✴ can still use CFRetain / CFRelease in CF
- Can’t use NSAllocateObject / NSDeallocateObject
- Can’t use object pointer in C Structures
- no casual casting id -> void*
- Can’t use NSAutoreleasePool -> @autoreleasepool
- Can’t use memory zone (NSZone)
- Can’t give a property name with new-
Automatic Reference Coun
Debugging Tip#4
Diagnostics
osxdev.org
Diagnostics
• Memory Management
- Malloc
✴ Enable Scribble
✴ Enable Guard Edges
- Guard Malloc
- Objective-C - Zombie Objects
• Logging
- Memory
✴ Distributed Objects
✴ Garbage Collection Activity
✴ Malloc Stack
- Exception
- Dyld API Usage
- Library Loads
• Debugger
- Stop on Debugger() and DebugStr()
osxdev.org
LLDB
• Next-generation
• & High-performance Debugger
• a set of reusable components in LLVM
• Clang expression parser
• LLVM disassembler
• C/C++, Objective-C
• Efficient Multi-threading, symbol manager
• Extension - Python script
• Support Remote protocol/debug server
osxdev.org
Introduction
GDB
LLDB
% gdb a.out
(gdb) break main
Breakpoint 1 at 0x100000f33:file main.c line4
(gdb) run
% lldb a.out
(lldb) breakpoint set --name main
Breakpoint created:1:name=‘main’, locations=1
(lldb) process launch
osxdev.org
Introduction
GDB
LLDB
(gdb) info args
argc = 1
argv = (const char **) 0x7fff5fbff550
(gdb) info locals
i = 32767
(lldb) frame variable
argc = 1
argv = 0x00007fff5fbfff68
i = 0
osxdev.org
LLDB Command Syntax
Command Syntax
<type> <action> [-options [option-value]] [argument [argument...]]
Uses standard getopt_long() for predicate behavior
(lldb) process launch a.out --stop-at-entry
(lldb) process launch a.out -- --arg0 --arg1
(lldb) process launch a.out -st
Options know which other options they are compatible with
(lldb) process attach --pid 123 --name a.out
Type : breakpoint, commands, frame, image, log, memory, process,
regexp-break, register, settings, source, target, thread
osxdev.org
Common Commands
GDB LLDB
(gdb) ^C
(gdb) signal 2
(gdb) info break
(gdb) continue
(gdb) step
(gdb) stepi
(gdb) next
(gdb) nexti
(gdb) finish
(gdb) info threads
(gdb) backtrace
(lldb) process interrupt
(lldb) process signal SIGINT
(lldb) breakpoint list
(lldb) process continue
(lldb) thread step-in
(lldb) thread step-inst
(lldb) thread step-over
(lldb) thread step-over-inst
(lldb) thread step-out
(lldb) thread list
(lldb) thread backtrace
osxdev.org
Common Commands
GDB LLDB
(gdb) ^C
(gdb) signal 2
(gdb) in br
(gdb) c
(gdb) s
(gdb) si
(gdb) n
(gdb) ni
(gdb) f
(gdb) info threads
(gdb) bt
(lldb) pro int
(lldb) pro s SIGINT
(lldb) br l
(lldb) c
(lldb) s
(lldb) si
(lldb) n
(lldb) ni
(lldb) f
(lldb) th l
(lldb) bt
osxdev.org
Apropos Command
(lldb) apropos thread
The following commands may relate to 'thread':
breakporint command add -- Add a set of commands to a breakpoint, to be executed whenever ...
breakpoint modify -- Modify the options on a breakpoint or set of breakpoints...
breakpoint set -- Sets a breakpoint or set of breakpoints in the executable.
frame -- A set of commands for operating on the current thread's...
frame info -- List information about the currently selected frame in the...
frame select -- Select a frame by index from within the current thread...
log enable -- Enable logging for a single log channel.
process continue -- Continue execution of all threads in the current process.
register -- A set of commands to access thread registers.
thread -- A set of commands for operating on one or more...
thread backtrace -- Show the stack for one or more threads. If no threads are...
thread continue -- Continue execution of one or more threads in an active...
thread list -- Show a summary of all current threads in a process.
thread select -- Select a thread as the currently active thread.
thread step-in -- Source level single step in specified thread (current...
thread step-inst -- Single step one instruction in specified thread (current..
osxdev.org
Expression in LLDB
LLDB
(lldb) expression x+y->getCount()
(int) $0 = 2
(lldb) expression pt
(struct point_tag) $1 = {
(int) x = 2
(int) y = 3
}
(lldb) expression $1.x
(int) $2 = 2
osxdev.org
References
• Apple Documents - Technical Notes
• TN2124 Mac OS X Debugging Magic
• https://developer.apple.com/library/ios/#technotes/tn2004/
tn2124.html#//apple_ref/doc/uid/DTS10003391
• TN2239 iOS Debugging Magic
• https://developer.apple.com/library/ios/#technotes/tn2239/
_index.html#//apple_ref/doc/uid/DTS40010638
InstrumentsXray
새로워진 Instruments #1
✴ The Jump Bar
✴ Improved View Access
✴ Collapsible, Track, Full screen
✴ The Call Tree
✴ Backtrace Compression with Filtering
✴ The Source View
✴ Timeline Flags
- Navigating the improved UI
새로워진 Instruments #2
✴ Immediate vs. Deferred Mode
✴ Immediate mode - “Classic Instruments mode”
✴ Deferred mode
✴ Processes and displays data at end of recording
✴ Vastly reduces “observer effect”
✴ More samples relate to your app.
✴ Launch Daemons and Agents (Mac OS X only)
✴ over Wi-Fi (iPhone OS 3.1+)
✴ Re-Symbolication
- Recording Techniques
새로워진 Instruments #3
✴ Time Profiler
✴ more efficient than CPU Sampler
✴ Deferred mode
✴ Heapshots
✴ Part of Allocation template
✴ VM Tracker
✴ Tracks the virtual memory of a process
- Advancement to existing Instruments
새로워진 Instruments #4
✴ Energy Diagnostics
✴ Provides diagnostics regarding energy usage
✴ Records battery power and CPU usage
✴ Automation
✴ Simulate UI interaction with iOS app.
✴ Leverages JavaScript to script iPhone UI
components
✴ OpenGL ES Analysis
- Significant New Instrumentation
UI Automation
✴ Automates UIKit based applications
✴ Touch based
✴ iPhone, iPod touch and iPhone Simulator
✴ Integrated in Instruments
✴ Accessibility based
✴ JavaScript automation scripts
✴ UI Automation Reference Collection
- What is this?
새로워진 Instruments #4
✴ System Trace
✴ Provides comprehensive information on system
behavior
✴ Identifies when threads are scheduled and why
✴ Display thread transition from user space into
system code
✴ System calls, VM operations
✴ Highlights View - summary
- Really New Instrumentation
DTrace
$ D Language
Software Stack Tools
DTrace is...
✴ dynamic tracing facility
✴ developed by Sun Microsystems
✴ for Solaris 10
✴ designed by Bryan Cantrill, Mike Shapiro, and Adam
Leventhal.
✴ introduced with Leopard (Prior to 10.5 ktrace)
✴ http://hub.opensolaris.org/bin/view/Community+Group
+dtrace/WebHome
✴ http://en.wikipedia.org/wiki/DTrace
osxdev.org
Overview
osxdev.org
DTrace Workflow
osxdev.org
D Language
✴ A Large subset of C
✴ with a special set of functions to analyzing system
behavior.
✴ run in kernel-land.
✴ compiled into a safe form (similar to java bytecode)
✴ validated for safety.
✴ filename extension .d
DTraceToolkit
osxdev.org
DTraceTookits
✴ iosnoop
✴ hfssnoop
✴ execsnoop
✴ opensnoop
✴ dtruss
✴ soconnect_mac
✴ errinfo
✴ bitesize
✴ iotop
✴ maclife
Probes
osxdev.org
Probes
✴ Providers - the instruments
✴ Module - a specific program location
✴ Function - a specific function name
✴ Name - an indication of the probe’s semantic meaning
syscall :: open : entry
syscall :: open* : entry
syscall ::: entry
syscall :::
osxdev.org
BEGIN - END Providers
/* show the BEGIN and END providers
run with:
sudo dtrace -s begin-end.d
*/
BEGIN
{
trace("begin the beguine");
exit(0);
}
END
{
trace("that's all, folks...");
}
osxdev.org
syscall Provider
/* show all system calls being made, system-wide
Run with
sudo dtrace -qs syscalls.d
*/
syscall:::
/execname != "dtrace"/
{
printf("%s fired in %s", probefunc, execname);
}
osxdev.org
profile Provider
/* show the profile (timer) provider.
Run with
sudo dtrace -s lubdub.d
*/
profile:::tick-5sec
{
trace("five second timer");
}
profile:::tick-1min
{
trace("one minute timer");
}
profile:::tick-800msec
{
trace("800 millisecond timer");
}
osxdev.org
proc Provider
/* Show procoess launches across the system.
Run with
sudo dtrace -s execs.d
*/
proc:::exec-success
{
trace(execname);
}
osxdev.org
Actions
✴ the lines of code
✴ assign values to variables, perform computations,
aggregate values over time...
✴ no flow control (no if, no loops)
✴ use predicates
osxdev.org
Variables
✴ C standard types : char, int, short, long, long long...
✴ display floating point values from probes
✴ cannot perform floating point math
✴ cannot cast float to integer
✴ global by default
✴ standard C operators all work
✴ do comparison operators (^^ XOR)
✴ use strcmp()
osxdev.org
example 9.6
/* sings a pretty song.
run with:
sudo dtrace -qs beer.d
*/
int bottles; /* optional */
BEGIN
{
bottles = 99;
}
profile:::tick-1sec
{
printf("%d bottles of beer on the walln", bottles);
printf("%d bottles of beer.n", bottles);
printf("take one down, pass it aroundn");
printf("%d bottles of beer on the wallnn", bottles);
bottles--;
}
END
{
printf("that's all, folks...");
}
osxdev.org
Scoped Variables
✴ Thread-local variable = self->
✴ Clause-local variable = this->
osxdev.org
Built-in Variables
✴ int64_t arg0, arg1, ... arg9
✴ args[]
✴ cwd
✴ errno
✴ execname
✴ pid
✴ stackdepth
✴ timestamp, vtimestamp
✴ probeprov, probemod
✴ probefunc, probename
osxdev.org
example 9.7
/* show all system calls being made, system-wide
Run with
sudo dtrace -qs syscalls.d
*/
syscall:::
/execname != "dtrace"/
{
printf("%s fired in %s", probefunc, execname);
}
osxdev.org
Functions
✴ printf
✴ trace
✴ printa
✴ ustack
✴ exit
✴ copyin, copyinstr
osxdev.org
Arrays
/* calculate the wall-clock time it takes to read()
Run with
sudo dtrace -qs ./readtime.d
*/
syscall::read:entry
{
ts[pid, probefunc] = timestamp;
}
syscall::read:return
/ts[pid, probefunc] != 0/
{
delta = timestamp - ts[pid, probefunc];
printf("read in %s took %d nsecs", execname, delta);
}
osxdev.org
Predicates
✴ logical expressions
✴ enclosed by slashes
/* Watch entry into kevent() */
syscall::kevent:entry
/execname == "dirwatcher" || execname == "DirectoryServic"/
{
printf("%s called kevent()", execname);
}
osxdev.org
Aggregates
✴ count()
✴ sum(expression)
✴ avg(expression)
✴ min(expression)
✴ max(expression)
✴ quantize(expression)
@name[key] = aggfunc()
DTrace Reference Book
ptg
http://www.dtracebook.com/index.php/Main_Page


Weitere ähnliche Inhalte

Was ist angesagt?

JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?Doug Hawkins
 
Ahead-Of-Time Compilation of Java Applications
Ahead-Of-Time Compilation of Java ApplicationsAhead-Of-Time Compilation of Java Applications
Ahead-Of-Time Compilation of Java ApplicationsNikita Lipsky
 
Bytecode manipulation with Javassist and ASM
Bytecode manipulation with Javassist and ASMBytecode manipulation with Javassist and ASM
Bytecode manipulation with Javassist and ASMashleypuls
 
Mastering java bytecode with ASM - GeeCON 2012
Mastering java bytecode with ASM - GeeCON 2012Mastering java bytecode with ASM - GeeCON 2012
Mastering java bytecode with ASM - GeeCON 2012Anton Arhipov
 
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers Nikita Lipsky
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemGuardSquare
 
Java and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemJava and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemRafael Winterhalter
 
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Johnny Sung
 
Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!Sylvain Wallez
 
Java 8 and beyond, a scala story
Java 8 and beyond, a scala storyJava 8 and beyond, a scala story
Java 8 and beyond, a scala storyittaiz
 
Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924yohanbeschi
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9Ivan Krylov
 
JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011Charles Nutter
 
What Makes Objective C Dynamic?
What Makes Objective C Dynamic?What Makes Objective C Dynamic?
What Makes Objective C Dynamic?Kyle Oba
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesmametter
 

Was ist angesagt? (20)

C++ Advanced Features
C++ Advanced FeaturesC++ Advanced Features
C++ Advanced Features
 
Android JNI
Android JNIAndroid JNI
Android JNI
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?
 
Ahead-Of-Time Compilation of Java Applications
Ahead-Of-Time Compilation of Java ApplicationsAhead-Of-Time Compilation of Java Applications
Ahead-Of-Time Compilation of Java Applications
 
Bytecode manipulation with Javassist and ASM
Bytecode manipulation with Javassist and ASMBytecode manipulation with Javassist and ASM
Bytecode manipulation with Javassist and ASM
 
Mastering java bytecode with ASM - GeeCON 2012
Mastering java bytecode with ASM - GeeCON 2012Mastering java bytecode with ASM - GeeCON 2012
Mastering java bytecode with ASM - GeeCON 2012
 
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
 
Runtime
RuntimeRuntime
Runtime
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build system
 
Java and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemJava and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystem
 
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
 
Guild Prototype
Guild PrototypeGuild Prototype
Guild Prototype
 
Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!
 
Java 8 and beyond, a scala story
Java 8 and beyond, a scala storyJava 8 and beyond, a scala story
Java 8 and beyond, a scala story
 
Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011
 
Return of c++
Return of c++Return of c++
Return of c++
 
What Makes Objective C Dynamic?
What Makes Objective C Dynamic?What Makes Objective C Dynamic?
What Makes Objective C Dynamic?
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signatures
 

Ähnlich wie 2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)

Kandroid for nhn_deview_20131013_v5_final
Kandroid for nhn_deview_20131013_v5_finalKandroid for nhn_deview_20131013_v5_final
Kandroid for nhn_deview_20131013_v5_finalNAVER D2
 
ClojureScript for the web
ClojureScript for the webClojureScript for the web
ClojureScript for the webMichiel Borkent
 
Specialized Compiler for Hash Cracking
Specialized Compiler for Hash CrackingSpecialized Compiler for Hash Cracking
Specialized Compiler for Hash CrackingPositive Hack Days
 
Native Java with GraalVM
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVMSylvain Wallez
 
Java 7 - New Features - by Mihail Stoynov and Svetlin Nakov
Java 7 - New Features - by Mihail Stoynov and Svetlin NakovJava 7 - New Features - by Mihail Stoynov and Svetlin Nakov
Java 7 - New Features - by Mihail Stoynov and Svetlin NakovSvetlin Nakov
 
Android OpenGL ES Game ImageGrabber Final Report
Android OpenGL ES Game ImageGrabber Final ReportAndroid OpenGL ES Game ImageGrabber Final Report
Android OpenGL ES Game ImageGrabber Final ReportJungsoo Nam
 
Linux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudLinux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudAndrea Righi
 
Behavior driven oop
Behavior driven oopBehavior driven oop
Behavior driven oopPiyush Verma
 
L Fu - Dao: a novel programming language for bioinformatics
L Fu - Dao: a novel programming language for bioinformaticsL Fu - Dao: a novel programming language for bioinformatics
L Fu - Dao: a novel programming language for bioinformaticsJan Aerts
 
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...Sang Don Kim
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemGuardSquare
 
Swift Install Workshop - OpenStack Conference Spring 2012
Swift Install Workshop - OpenStack Conference Spring 2012Swift Install Workshop - OpenStack Conference Spring 2012
Swift Install Workshop - OpenStack Conference Spring 2012Joe Arnold
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureThoughtworks
 
Go Is Your Next Language — Sergii Shapoval
Go Is Your Next Language — Sergii ShapovalGo Is Your Next Language — Sergii Shapoval
Go Is Your Next Language — Sergii ShapovalGlobalLogic Ukraine
 
Advanced spark training advanced spark internals and tuning reynold xin
Advanced spark training advanced spark internals and tuning reynold xinAdvanced spark training advanced spark internals and tuning reynold xin
Advanced spark training advanced spark internals and tuning reynold xincaidezhi655
 

Ähnlich wie 2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV) (20)

Understanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual MachineUnderstanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual Machine
 
A Life of breakpoint
A Life of breakpointA Life of breakpoint
A Life of breakpoint
 
Kandroid for nhn_deview_20131013_v5_final
Kandroid for nhn_deview_20131013_v5_finalKandroid for nhn_deview_20131013_v5_final
Kandroid for nhn_deview_20131013_v5_final
 
ClojureScript for the web
ClojureScript for the webClojureScript for the web
ClojureScript for the web
 
Specialized Compiler for Hash Cracking
Specialized Compiler for Hash CrackingSpecialized Compiler for Hash Cracking
Specialized Compiler for Hash Cracking
 
Native Java with GraalVM
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVM
 
Java 7 - New Features - by Mihail Stoynov and Svetlin Nakov
Java 7 - New Features - by Mihail Stoynov and Svetlin NakovJava 7 - New Features - by Mihail Stoynov and Svetlin Nakov
Java 7 - New Features - by Mihail Stoynov and Svetlin Nakov
 
IOS debugging
IOS debuggingIOS debugging
IOS debugging
 
Android OpenGL ES Game ImageGrabber Final Report
Android OpenGL ES Game ImageGrabber Final ReportAndroid OpenGL ES Game ImageGrabber Final Report
Android OpenGL ES Game ImageGrabber Final Report
 
Linux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudLinux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloud
 
Behavior driven oop
Behavior driven oopBehavior driven oop
Behavior driven oop
 
L Fu - Dao: a novel programming language for bioinformatics
L Fu - Dao: a novel programming language for bioinformaticsL Fu - Dao: a novel programming language for bioinformatics
L Fu - Dao: a novel programming language for bioinformatics
 
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build system
 
Swift Install Workshop - OpenStack Conference Spring 2012
Swift Install Workshop - OpenStack Conference Spring 2012Swift Install Workshop - OpenStack Conference Spring 2012
Swift Install Workshop - OpenStack Conference Spring 2012
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
 
NvFX GTC 2013
NvFX GTC 2013NvFX GTC 2013
NvFX GTC 2013
 
Go Is Your Next Language — Sergii Shapoval
Go Is Your Next Language — Sergii ShapovalGo Is Your Next Language — Sergii Shapoval
Go Is Your Next Language — Sergii Shapoval
 
App container rkt
App container rktApp container rkt
App container rkt
 
Advanced spark training advanced spark internals and tuning reynold xin
Advanced spark training advanced spark internals and tuning reynold xinAdvanced spark training advanced spark internals and tuning reynold xin
Advanced spark training advanced spark internals and tuning reynold xin
 

Mehr von JiandSon

2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)
2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)
2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)JiandSon
 
2015.03.14 Piday in Korea 지앤선 라즈베리 미트업(박종건)
2015.03.14 Piday in Korea 지앤선 라즈베리 미트업(박종건)2015.03.14 Piday in Korea 지앤선 라즈베리 미트업(박종건)
2015.03.14 Piday in Korea 지앤선 라즈베리 미트업(박종건)JiandSon
 
2013.02.02 지앤선 테크니컬 세미나 - iOS 테스팅 이야기(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - iOS 테스팅 이야기(OSXDEV)2013.02.02 지앤선 테크니컬 세미나 - iOS 테스팅 이야기(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - iOS 테스팅 이야기(OSXDEV)JiandSon
 
2013.02.02 지앤선 테크니컬 세미나 - 하둡으로 배우는 대용량 데이터 분산처리 기술(이현남)
2013.02.02 지앤선 테크니컬 세미나 - 하둡으로 배우는 대용량 데이터 분산처리 기술(이현남)2013.02.02 지앤선 테크니컬 세미나 - 하둡으로 배우는 대용량 데이터 분산처리 기술(이현남)
2013.02.02 지앤선 테크니컬 세미나 - 하둡으로 배우는 대용량 데이터 분산처리 기술(이현남)JiandSon
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)JiandSon
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)JiandSon
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)JiandSon
 

Mehr von JiandSon (7)

2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)
2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)
2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)
 
2015.03.14 Piday in Korea 지앤선 라즈베리 미트업(박종건)
2015.03.14 Piday in Korea 지앤선 라즈베리 미트업(박종건)2015.03.14 Piday in Korea 지앤선 라즈베리 미트업(박종건)
2015.03.14 Piday in Korea 지앤선 라즈베리 미트업(박종건)
 
2013.02.02 지앤선 테크니컬 세미나 - iOS 테스팅 이야기(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - iOS 테스팅 이야기(OSXDEV)2013.02.02 지앤선 테크니컬 세미나 - iOS 테스팅 이야기(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - iOS 테스팅 이야기(OSXDEV)
 
2013.02.02 지앤선 테크니컬 세미나 - 하둡으로 배우는 대용량 데이터 분산처리 기술(이현남)
2013.02.02 지앤선 테크니컬 세미나 - 하둡으로 배우는 대용량 데이터 분산처리 기술(이현남)2013.02.02 지앤선 테크니컬 세미나 - 하둡으로 배우는 대용량 데이터 분산처리 기술(이현남)
2013.02.02 지앤선 테크니컬 세미나 - 하둡으로 배우는 대용량 데이터 분산처리 기술(이현남)
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
 

Kürzlich hochgeladen

The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialJoão Esperancinha
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sectoritnewsafrica
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 

Kürzlich hochgeladen (20)

The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorial
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 

2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)

  • 1. 매력적인 Xcode 디버깅 팁 ARC, Instruments, DTrace twitter.com/@godrmOSXDEV.org 오로라플래닛 김정
  • 2. Single Window Built-in Interface Builder LLVM Compiler LLDB Debugger Fix-it & Live issue Assistant Version Editor Navigators & Utilities Multi-window & Multi-tab Visual Connections (IB) Refactor Code Complete New Instruments Scheme Workspace
  • 5. Breakpoint Action ✴ Condition (조건) ✴ Ignore (무시할 반복회수) ✴ Action (동작) ✴ AppleScript, Capture OpenGL ES Frame, Debugger Command, Log Message, Shell Command, Sound ✴ Options (선택사항)
  • 6. Exception Breakpoint ✴ 프로젝트 전체 범위 ✴ 예외(Exception) 발생할 경우 ✴ C++ / Objective-C 형태 예외처리 ✴ 동작 설정 가능
  • 7. Symbolic Breakpoint ✴ 소스 코드의 심벌 이름에 설정 ✴ [클래스 +] 메서드 형태 심벌 지정 ✴ 모듈 (라이브러리) 지정
  • 9. osxdev.org Introduction • LLVM - Low-Level Virtual Machine • An Infrastructure for Multi-stage Optimization - by Chris Arthur Lattner @2002 • Design and Implementation of a compiler infrastructure - support a unique multi-stage optimization system - support inter-procedural and profile-driven optimizations • LLVM virtual instruction (IR) - with high-level type information • Sponsored by APPLE
  • 10. osxdev.org Compiler Architectures GCC#4.2# 프론트엔드# C" Tree*SSA# 최적화기# 코드 생성기#C++" Objec)ve+C" 실행파일" GCC"4.2" GCC#4.2# 프론트엔드# C" LLVM# 최적화기# LLVM# 코드 생성기# C++" Objec)ve+C" 실행파일" LLVM+GCC"4.2" Clang# 프론트엔드# C" LLVM# 최적화기# LLVM# 코드 생성기# C++" Objec)ve+C" 실행파일" LLVM"
  • 11. osxdev.org Effective LLVM Projects Xcode OpenCL OpenGL Optimize (speed) Optimize (size) Dynamic Prog. Clang LLDB LLVM
  • 13. osxdev.org 잘못된 예제 코드 CFNumberRef CFNumberError(int param) { unsigned int i = 1; bool isWork = NO; CFNumberRef x = CFNumberCreate(0, kCFNumberLongType, &i); if (param==0) isWork = YES; return x; } void leakError() { NSMutableString *aString = [NSMutableString stringWithCapacity:100]; [aString retain]; //... NSMutableArray *aArray = [[NSMutableArray alloc] initWithCapacity:10]; //... [aArray removeAllObjects]; //release } void NullDerefence(id object) { char* pChar = NULL; ///pChar pointer... *pChar = '!'; } int uninitialized(int x) { int result; if (x>0) { result = 1; } else if (x==0) { result = 0; } return result; }
  • 17. 잠재된 메모리 누수 (Potential Leak)
  • 18. 널 참조 (Null Dereference)
  • 21. osxdev.org ARC • Automatic Reference Counting - Automatic memory management of Objective-C objects - Just Compile-time, Not Run-time • Not Garbage-Collector • Migration Tool in Xcode 4.2 - with LLVM 3.0 - build-settings : -fobjc-arc (cf. -fno-objc-arc) • New Rules - remove dealloc, retain/release/autorelease ✴ can still use CFRetain / CFRelease in CF - Can’t use NSAllocateObject / NSDeallocateObject - Can’t use object pointer in C Structures - no casual casting id -> void* - Can’t use NSAutoreleasePool -> @autoreleasepool - Can’t use memory zone (NSZone) - Can’t give a property name with new- Automatic Reference Coun
  • 23. osxdev.org Diagnostics • Memory Management - Malloc ✴ Enable Scribble ✴ Enable Guard Edges - Guard Malloc - Objective-C - Zombie Objects • Logging - Memory ✴ Distributed Objects ✴ Garbage Collection Activity ✴ Malloc Stack - Exception - Dyld API Usage - Library Loads • Debugger - Stop on Debugger() and DebugStr()
  • 24.
  • 25. osxdev.org LLDB • Next-generation • & High-performance Debugger • a set of reusable components in LLVM • Clang expression parser • LLVM disassembler • C/C++, Objective-C • Efficient Multi-threading, symbol manager • Extension - Python script • Support Remote protocol/debug server
  • 26. osxdev.org Introduction GDB LLDB % gdb a.out (gdb) break main Breakpoint 1 at 0x100000f33:file main.c line4 (gdb) run % lldb a.out (lldb) breakpoint set --name main Breakpoint created:1:name=‘main’, locations=1 (lldb) process launch
  • 27. osxdev.org Introduction GDB LLDB (gdb) info args argc = 1 argv = (const char **) 0x7fff5fbff550 (gdb) info locals i = 32767 (lldb) frame variable argc = 1 argv = 0x00007fff5fbfff68 i = 0
  • 28. osxdev.org LLDB Command Syntax Command Syntax <type> <action> [-options [option-value]] [argument [argument...]] Uses standard getopt_long() for predicate behavior (lldb) process launch a.out --stop-at-entry (lldb) process launch a.out -- --arg0 --arg1 (lldb) process launch a.out -st Options know which other options they are compatible with (lldb) process attach --pid 123 --name a.out Type : breakpoint, commands, frame, image, log, memory, process, regexp-break, register, settings, source, target, thread
  • 29. osxdev.org Common Commands GDB LLDB (gdb) ^C (gdb) signal 2 (gdb) info break (gdb) continue (gdb) step (gdb) stepi (gdb) next (gdb) nexti (gdb) finish (gdb) info threads (gdb) backtrace (lldb) process interrupt (lldb) process signal SIGINT (lldb) breakpoint list (lldb) process continue (lldb) thread step-in (lldb) thread step-inst (lldb) thread step-over (lldb) thread step-over-inst (lldb) thread step-out (lldb) thread list (lldb) thread backtrace
  • 30. osxdev.org Common Commands GDB LLDB (gdb) ^C (gdb) signal 2 (gdb) in br (gdb) c (gdb) s (gdb) si (gdb) n (gdb) ni (gdb) f (gdb) info threads (gdb) bt (lldb) pro int (lldb) pro s SIGINT (lldb) br l (lldb) c (lldb) s (lldb) si (lldb) n (lldb) ni (lldb) f (lldb) th l (lldb) bt
  • 31. osxdev.org Apropos Command (lldb) apropos thread The following commands may relate to 'thread': breakporint command add -- Add a set of commands to a breakpoint, to be executed whenever ... breakpoint modify -- Modify the options on a breakpoint or set of breakpoints... breakpoint set -- Sets a breakpoint or set of breakpoints in the executable. frame -- A set of commands for operating on the current thread's... frame info -- List information about the currently selected frame in the... frame select -- Select a frame by index from within the current thread... log enable -- Enable logging for a single log channel. process continue -- Continue execution of all threads in the current process. register -- A set of commands to access thread registers. thread -- A set of commands for operating on one or more... thread backtrace -- Show the stack for one or more threads. If no threads are... thread continue -- Continue execution of one or more threads in an active... thread list -- Show a summary of all current threads in a process. thread select -- Select a thread as the currently active thread. thread step-in -- Source level single step in specified thread (current... thread step-inst -- Single step one instruction in specified thread (current..
  • 32. osxdev.org Expression in LLDB LLDB (lldb) expression x+y->getCount() (int) $0 = 2 (lldb) expression pt (struct point_tag) $1 = { (int) x = 2 (int) y = 3 } (lldb) expression $1.x (int) $2 = 2
  • 33. osxdev.org References • Apple Documents - Technical Notes • TN2124 Mac OS X Debugging Magic • https://developer.apple.com/library/ios/#technotes/tn2004/ tn2124.html#//apple_ref/doc/uid/DTS10003391 • TN2239 iOS Debugging Magic • https://developer.apple.com/library/ios/#technotes/tn2239/ _index.html#//apple_ref/doc/uid/DTS40010638
  • 35. 새로워진 Instruments #1 ✴ The Jump Bar ✴ Improved View Access ✴ Collapsible, Track, Full screen ✴ The Call Tree ✴ Backtrace Compression with Filtering ✴ The Source View ✴ Timeline Flags - Navigating the improved UI
  • 36. 새로워진 Instruments #2 ✴ Immediate vs. Deferred Mode ✴ Immediate mode - “Classic Instruments mode” ✴ Deferred mode ✴ Processes and displays data at end of recording ✴ Vastly reduces “observer effect” ✴ More samples relate to your app. ✴ Launch Daemons and Agents (Mac OS X only) ✴ over Wi-Fi (iPhone OS 3.1+) ✴ Re-Symbolication - Recording Techniques
  • 37. 새로워진 Instruments #3 ✴ Time Profiler ✴ more efficient than CPU Sampler ✴ Deferred mode ✴ Heapshots ✴ Part of Allocation template ✴ VM Tracker ✴ Tracks the virtual memory of a process - Advancement to existing Instruments
  • 38. 새로워진 Instruments #4 ✴ Energy Diagnostics ✴ Provides diagnostics regarding energy usage ✴ Records battery power and CPU usage ✴ Automation ✴ Simulate UI interaction with iOS app. ✴ Leverages JavaScript to script iPhone UI components ✴ OpenGL ES Analysis - Significant New Instrumentation
  • 39. UI Automation ✴ Automates UIKit based applications ✴ Touch based ✴ iPhone, iPod touch and iPhone Simulator ✴ Integrated in Instruments ✴ Accessibility based ✴ JavaScript automation scripts ✴ UI Automation Reference Collection - What is this?
  • 40. 새로워진 Instruments #4 ✴ System Trace ✴ Provides comprehensive information on system behavior ✴ Identifies when threads are scheduled and why ✴ Display thread transition from user space into system code ✴ System calls, VM operations ✴ Highlights View - summary - Really New Instrumentation
  • 43. DTrace is... ✴ dynamic tracing facility ✴ developed by Sun Microsystems ✴ for Solaris 10 ✴ designed by Bryan Cantrill, Mike Shapiro, and Adam Leventhal. ✴ introduced with Leopard (Prior to 10.5 ktrace) ✴ http://hub.opensolaris.org/bin/view/Community+Group +dtrace/WebHome ✴ http://en.wikipedia.org/wiki/DTrace
  • 46. osxdev.org D Language ✴ A Large subset of C ✴ with a special set of functions to analyzing system behavior. ✴ run in kernel-land. ✴ compiled into a safe form (similar to java bytecode) ✴ validated for safety. ✴ filename extension .d
  • 48. osxdev.org DTraceTookits ✴ iosnoop ✴ hfssnoop ✴ execsnoop ✴ opensnoop ✴ dtruss ✴ soconnect_mac ✴ errinfo ✴ bitesize ✴ iotop ✴ maclife
  • 50. osxdev.org Probes ✴ Providers - the instruments ✴ Module - a specific program location ✴ Function - a specific function name ✴ Name - an indication of the probe’s semantic meaning syscall :: open : entry syscall :: open* : entry syscall ::: entry syscall :::
  • 51. osxdev.org BEGIN - END Providers /* show the BEGIN and END providers run with: sudo dtrace -s begin-end.d */ BEGIN { trace("begin the beguine"); exit(0); } END { trace("that's all, folks..."); }
  • 52. osxdev.org syscall Provider /* show all system calls being made, system-wide Run with sudo dtrace -qs syscalls.d */ syscall::: /execname != "dtrace"/ { printf("%s fired in %s", probefunc, execname); }
  • 53. osxdev.org profile Provider /* show the profile (timer) provider. Run with sudo dtrace -s lubdub.d */ profile:::tick-5sec { trace("five second timer"); } profile:::tick-1min { trace("one minute timer"); } profile:::tick-800msec { trace("800 millisecond timer"); }
  • 54. osxdev.org proc Provider /* Show procoess launches across the system. Run with sudo dtrace -s execs.d */ proc:::exec-success { trace(execname); }
  • 55. osxdev.org Actions ✴ the lines of code ✴ assign values to variables, perform computations, aggregate values over time... ✴ no flow control (no if, no loops) ✴ use predicates
  • 56. osxdev.org Variables ✴ C standard types : char, int, short, long, long long... ✴ display floating point values from probes ✴ cannot perform floating point math ✴ cannot cast float to integer ✴ global by default ✴ standard C operators all work ✴ do comparison operators (^^ XOR) ✴ use strcmp()
  • 57. osxdev.org example 9.6 /* sings a pretty song. run with: sudo dtrace -qs beer.d */ int bottles; /* optional */ BEGIN { bottles = 99; } profile:::tick-1sec { printf("%d bottles of beer on the walln", bottles); printf("%d bottles of beer.n", bottles); printf("take one down, pass it aroundn"); printf("%d bottles of beer on the wallnn", bottles); bottles--; } END { printf("that's all, folks..."); }
  • 58. osxdev.org Scoped Variables ✴ Thread-local variable = self-> ✴ Clause-local variable = this->
  • 59. osxdev.org Built-in Variables ✴ int64_t arg0, arg1, ... arg9 ✴ args[] ✴ cwd ✴ errno ✴ execname ✴ pid ✴ stackdepth ✴ timestamp, vtimestamp ✴ probeprov, probemod ✴ probefunc, probename
  • 60. osxdev.org example 9.7 /* show all system calls being made, system-wide Run with sudo dtrace -qs syscalls.d */ syscall::: /execname != "dtrace"/ { printf("%s fired in %s", probefunc, execname); }
  • 61. osxdev.org Functions ✴ printf ✴ trace ✴ printa ✴ ustack ✴ exit ✴ copyin, copyinstr
  • 62. osxdev.org Arrays /* calculate the wall-clock time it takes to read() Run with sudo dtrace -qs ./readtime.d */ syscall::read:entry { ts[pid, probefunc] = timestamp; } syscall::read:return /ts[pid, probefunc] != 0/ { delta = timestamp - ts[pid, probefunc]; printf("read in %s took %d nsecs", execname, delta); }
  • 63. osxdev.org Predicates ✴ logical expressions ✴ enclosed by slashes /* Watch entry into kevent() */ syscall::kevent:entry /execname == "dirwatcher" || execname == "DirectoryServic"/ { printf("%s called kevent()", execname); }
  • 64. osxdev.org Aggregates ✴ count() ✴ sum(expression) ✴ avg(expression) ✴ min(expression) ✴ max(expression) ✴ quantize(expression) @name[key] = aggfunc()
  • 66.