SlideShare a Scribd company logo
매력적인 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()
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
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

Ad

More Related Content

What's hot (20)

C++ Advanced Features
C++ Advanced FeaturesC++ Advanced Features
C++ Advanced Features
Michael Redlich
 
Android JNI
Android JNIAndroid JNI
Android JNI
Siva Ramakrishna kv
 
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 Applications
Nikita Lipsky
 
Bytecode manipulation with Javassist and ASM
Bytecode manipulation with Javassist and ASMBytecode manipulation with Javassist and ASM
Bytecode manipulation with Javassist and ASM
ashleypuls
 
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
Anton 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
 
Runtime
RuntimeRuntime
Runtime
Jorge Ortiz
 
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
GuardSquare
 
Java and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemJava and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystem
Rafael Winterhalter
 
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Johnny Sung
 
Guild Prototype
Guild PrototypeGuild Prototype
Guild Prototype
Koichi Sasada
 
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 story
ittaiz
 
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
yohanbeschi
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
Ivan Krylov
 
JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011
Charles Nutter
 
Return of c++
Return of c++Return of c++
Return of c++
Yongwei Wu
 
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 signatures
mametter
 
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 Applications
Nikita Lipsky
 
Bytecode manipulation with Javassist and ASM
Bytecode manipulation with Javassist and ASMBytecode manipulation with Javassist and ASM
Bytecode manipulation with Javassist and ASM
ashleypuls
 
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
Anton 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 system
GuardSquare
 
Java and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemJava and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystem
Rafael Winterhalter
 
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Johnny 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 story
ittaiz
 
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
yohanbeschi
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
Ivan Krylov
 
JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011
Charles 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 signatures
mametter
 

Similar to 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
National Cheng Kung University
 
A Life of breakpoint
A Life of breakpointA Life of breakpoint
A Life of breakpoint
Hajime Morrita
 
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
NAVER D2
 
ClojureScript for the web
ClojureScript for the webClojureScript for the web
ClojureScript for the web
Michiel Borkent
 
Specialized Compiler for Hash Cracking
Specialized Compiler for Hash CrackingSpecialized Compiler for Hash Cracking
Specialized Compiler for Hash Cracking
Positive Hack Days
 
Native Java with GraalVM
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVM
Sylvain 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 Nakov
Svetlin Nakov
 
IOS debugging
IOS debuggingIOS debugging
IOS debugging
Dawid Planeta
 
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
Jungsoo 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 cloud
Andrea Righi
 
Behavior driven oop
Behavior driven oopBehavior driven oop
Behavior driven oop
Piyush 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 bioinformatics
Jan 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 system
GuardSquare
 
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
Joe 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 Architecture
Thoughtworks
 
NvFX GTC 2013
NvFX GTC 2013NvFX GTC 2013
NvFX GTC 2013
Tristan Lorach
 
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
GlobalLogic Ukraine
 
App container rkt
App container rktApp container rkt
App container rkt
Xiaofeng Guo
 
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
caidezhi655
 
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
NAVER D2
 
ClojureScript for the web
ClojureScript for the webClojureScript for the web
ClojureScript for the web
Michiel Borkent
 
Specialized Compiler for Hash Cracking
Specialized Compiler for Hash CrackingSpecialized Compiler for Hash Cracking
Specialized Compiler for Hash Cracking
Positive Hack Days
 
Native Java with GraalVM
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVM
Sylvain 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 Nakov
Svetlin 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 Report
Jungsoo 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 cloud
Andrea Righi
 
Behavior driven oop
Behavior driven oopBehavior driven oop
Behavior driven oop
Piyush 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 bioinformatics
Jan 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 system
GuardSquare
 
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
Joe 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 Architecture
Thoughtworks
 
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
GlobalLogic 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 xin
caidezhi655
 
Ad

More from JiandSon (7)

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
 
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
 
Ad

Recently uploaded (20)

2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 

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()
  • 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.