Enviar búsqueda
Cargar
デバッグ戦略
•
3 recomendaciones
•
2,086 vistas
Masahiro Wakame
Seguir
Tecnología
Empresariales
Denunciar
Compartir
Denunciar
Compartir
1 de 39
Descargar ahora
Descargar para leer sin conexión
Recomendados
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Loïc Knuchel
Java весна 2013 лекция 6
Java весна 2013 лекция 6
Technopark
JQuery
JQuery
koji lin
Jeffri ferdinand panjaitan 17.01.132 (ti4 c)
Jeffri ferdinand panjaitan 17.01.132 (ti4 c)
jeffriferdinand
Java
Java
Antonio Furone
1- Sourcecode Array
1- Sourcecode Array
Fajar Baskoro
Шаблоны проектирования 2
Шаблоны проектирования 2
Constantin Kichinsky
Java & le pattern matching
Java & le pattern matching
Didier Plaindoux
Recomendados
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Loïc Knuchel
Java весна 2013 лекция 6
Java весна 2013 лекция 6
Technopark
JQuery
JQuery
koji lin
Jeffri ferdinand panjaitan 17.01.132 (ti4 c)
Jeffri ferdinand panjaitan 17.01.132 (ti4 c)
jeffriferdinand
Java
Java
Antonio Furone
1- Sourcecode Array
1- Sourcecode Array
Fajar Baskoro
Шаблоны проектирования 2
Шаблоны проектирования 2
Constantin Kichinsky
Java & le pattern matching
Java & le pattern matching
Didier Plaindoux
An introduction to functional programming with Go [redux]
An introduction to functional programming with Go [redux]
Eleanor McHugh
python-geohex
python-geohex
Ryo Aita
20150415 csharp6.0
20150415 csharp6.0
Ricardo González
Boost.勉強会#4 Boost.Proto
Boost.勉強会#4 Boost.Proto
fjnl
Reactive x
Reactive x
myposter GmbH
All set1
All set1
Sagar Yeole
Java
Java
Dany Ianko
Programación funcional en Haskell
Programación funcional en Haskell
Roberto Bonvallet
EJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOS
Darwin Durand
Tugas pw [10]
Tugas pw [10]
guest272e50
Tugas pw [10]
Tugas pw [10]
guestf689463
Spring Framework Orm Di
Spring Framework Orm Di
ahwkong2000
Most Common JavaScript Mistakes
Most Common JavaScript Mistakes
Yoann Gotthilf
FP is coming... le 19/05/2016
FP is coming... le 19/05/2016
Loïc Knuchel
Le rapport gallois 2012
Le rapport gallois 2012
ARXOM
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
Masahiro Wakame
俺とお前とGoogleware
俺とお前とGoogleware
Masahiro Wakame
Memes
Memes
Giorgos Philippis
JavaScript再入門
JavaScript再入門
Masahiro Wakame
JavaScript 再入門2
JavaScript 再入門2
Masahiro Wakame
TypeScript 独習会
TypeScript 独習会
Masahiro Wakame
TypeScript Hands-on
TypeScript Hands-on
Masahiro Wakame
Más contenido relacionado
La actualidad más candente
An introduction to functional programming with Go [redux]
An introduction to functional programming with Go [redux]
Eleanor McHugh
python-geohex
python-geohex
Ryo Aita
20150415 csharp6.0
20150415 csharp6.0
Ricardo González
Boost.勉強会#4 Boost.Proto
Boost.勉強会#4 Boost.Proto
fjnl
Reactive x
Reactive x
myposter GmbH
All set1
All set1
Sagar Yeole
Java
Java
Dany Ianko
Programación funcional en Haskell
Programación funcional en Haskell
Roberto Bonvallet
EJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOS
Darwin Durand
Tugas pw [10]
Tugas pw [10]
guest272e50
Tugas pw [10]
Tugas pw [10]
guestf689463
Spring Framework Orm Di
Spring Framework Orm Di
ahwkong2000
Most Common JavaScript Mistakes
Most Common JavaScript Mistakes
Yoann Gotthilf
FP is coming... le 19/05/2016
FP is coming... le 19/05/2016
Loïc Knuchel
La actualidad más candente
(14)
An introduction to functional programming with Go [redux]
An introduction to functional programming with Go [redux]
python-geohex
python-geohex
20150415 csharp6.0
20150415 csharp6.0
Boost.勉強会#4 Boost.Proto
Boost.勉強会#4 Boost.Proto
Reactive x
Reactive x
All set1
All set1
Java
Java
Programación funcional en Haskell
Programación funcional en Haskell
EJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOS
Tugas pw [10]
Tugas pw [10]
Tugas pw [10]
Tugas pw [10]
Spring Framework Orm Di
Spring Framework Orm Di
Most Common JavaScript Mistakes
Most Common JavaScript Mistakes
FP is coming... le 19/05/2016
FP is coming... le 19/05/2016
Destacado
Le rapport gallois 2012
Le rapport gallois 2012
ARXOM
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
Masahiro Wakame
俺とお前とGoogleware
俺とお前とGoogleware
Masahiro Wakame
Memes
Memes
Giorgos Philippis
JavaScript再入門
JavaScript再入門
Masahiro Wakame
JavaScript 再入門2
JavaScript 再入門2
Masahiro Wakame
TypeScript 独習会
TypeScript 独習会
Masahiro Wakame
TypeScript Hands-on
TypeScript Hands-on
Masahiro Wakame
Destacado
(8)
Le rapport gallois 2012
Le rapport gallois 2012
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
俺とお前とGoogleware
俺とお前とGoogleware
Memes
Memes
JavaScript再入門
JavaScript再入門
JavaScript 再入門2
JavaScript 再入門2
TypeScript 独習会
TypeScript 独習会
TypeScript Hands-on
TypeScript Hands-on
Más de Masahiro Wakame
GoCon2016 spring 自作Webフレームワーク uconを作った話
GoCon2016 spring 自作Webフレームワーク uconを作った話
Masahiro Wakame
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
TypeScriptは明日から使うべき
TypeScriptは明日から使うべき
Masahiro Wakame
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
Google Glass XE17版
Google Glass XE17版
Masahiro Wakame
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
Masahiro Wakame
コンパイラ指向ReVIEW
コンパイラ指向ReVIEW
Masahiro Wakame
20ヶ月を取り戻す Dart flight school
20ヶ月を取り戻す Dart flight school
Masahiro Wakame
Google Glassでできること XE11版 最新開発情報 Mirror API & GDK
Google Glassでできること XE11版 最新開発情報 Mirror API & GDK
Masahiro Wakame
ReVIEW & CI - ChefでCI環境構築
ReVIEW & CI - ChefでCI環境構築
Masahiro Wakame
Firefox OS勉強会 2nd TypeScript+AngularJS
Firefox OS勉強会 2nd TypeScript+AngularJS
Masahiro Wakame
AngularJS+TypeScript - AngularJS 1周年記念勉強会
AngularJS+TypeScript - AngularJS 1周年記念勉強会
Masahiro Wakame
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
Datastoreへのアクセスを楽してMemcacheアクセスに置き換えるライブラリ作った
Datastoreへのアクセスを楽してMemcacheアクセスに置き換えるライブラリ作った
Masahiro Wakame
TypeScript 勉強会
TypeScript 勉強会
Masahiro Wakame
わかめモナ化LT
わかめモナ化LT
Masahiro Wakame
NFC app launcher
NFC app launcher
Masahiro Wakame
函館IKA Eclipse活用術
函館IKA Eclipse活用術
Masahiro Wakame
函館IKA ICS開発情報
函館IKA ICS開発情報
Masahiro Wakame
Más de Masahiro Wakame
(20)
GoCon2016 spring 自作Webフレームワーク uconを作った話
GoCon2016 spring 自作Webフレームワーク uconを作った話
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
TypeScriptは明日から使うべき
TypeScriptは明日から使うべき
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Google Glass XE17版
Google Glass XE17版
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
コンパイラ指向ReVIEW
コンパイラ指向ReVIEW
20ヶ月を取り戻す Dart flight school
20ヶ月を取り戻す Dart flight school
Google Glassでできること XE11版 最新開発情報 Mirror API & GDK
Google Glassでできること XE11版 最新開発情報 Mirror API & GDK
ReVIEW & CI - ChefでCI環境構築
ReVIEW & CI - ChefでCI環境構築
Firefox OS勉強会 2nd TypeScript+AngularJS
Firefox OS勉強会 2nd TypeScript+AngularJS
AngularJS+TypeScript - AngularJS 1周年記念勉強会
AngularJS+TypeScript - AngularJS 1周年記念勉強会
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Datastoreへのアクセスを楽してMemcacheアクセスに置き換えるライブラリ作った
Datastoreへのアクセスを楽してMemcacheアクセスに置き換えるライブラリ作った
TypeScript 勉強会
TypeScript 勉強会
わかめモナ化LT
わかめモナ化LT
NFC app launcher
NFC app launcher
函館IKA Eclipse活用術
函館IKA Eclipse活用術
函館IKA ICS開発情報
函館IKA ICS開発情報
デバッグ戦略
1.
(@v vakame)
Android 2011 8 25
2.
•
• • http://www.slideshare.net/vvakame/debugging-strategy 2011 8 25
3.
2011
8 25
4.
2011
8 25
5.
… 2011
8 25
6.
•
• initA() initB() init() A, B public • 2 • ( ) • • … 2011 8 25
7.
/**
* bitmap . * * @param bitmapArrays */ static void dot1PixelA(Bitmap[][] bitmapArrays) { for (int i = 0; i < bitmapArrays.length; i++) { for for (int j = 0; j < bitmapArrays[i].length; i++) { bitmapArrays[j][i].setPixel(0, 0, Color.RED); } } } /** * bitmap . * * @param bitmapArrays */ static void dot1PixelB(Bitmap[][] bitmapArrays) { for (Bitmap[] bitmapArray : bitmapArrays) { for (Bitmap bitmap : bitmapArray) { for-each bitmap.setPixel(0, 0, Color.RED); } } } 2011 8 25
8.
/**
* bitmap . * * @param bitmapArrays */ static void dot1PixelA(Bitmap[][] bitmapArrays) { for (int i = 0; i < bitmapArrays.length; i++) { for for (int j = 0; j < bitmapArrays[i].length; i++) { bitmapArrays[j][i].setPixel(0, 0, Color.RED); } } } /** * bitmap . * * @param bitmapArrays */ static void dot1PixelB(Bitmap[][] bitmapArrays) { for (Bitmap[] bitmapArray : bitmapArrays) { for (Bitmap bitmap : bitmapArray) { for-each bitmap.setPixel(0, 0, Color.RED); } } } 2011 8 25
9.
Bitmap[][] bitmapArrays =
new Bitmap[10][10]; for (int i = 0; i < bitmapArrays.length; i++) { for (int j = 0; j < bitmapArrays[i].length; j++) { bitmapArrays[i][j] = Bitmap.createBitmap(3, 3, Config.ARGB_8888); } } … 2011 8 25
10.
ADT
2011/08/25 rev12 2011 8 25
11.
2011
8 25
12.
•
• • • null 2011 8 25
13.
• LogCat 2011
8 25
14.
• L07 @Override
L08 public void onCreate(Bundle savedInstanceState) { L09 super.onCreate(savedInstanceState); L10 setContentView(R.layout.main); L11 L12 try { L13 throw new NullPointerException(); L14 } catch (Exception e1) { L15 try { L16 throw new IllegalArgumentException(e1); L17 } catch (Exception e2) { L18 try { L19 throw new IllegalStateException(e2); L20 } catch (Exception e3) { L21 throw new RuntimeException(e3); L22 } L23 } L24 } L25 } Caused 2011 8 25
15.
•
L08 @Override L09 public void onCreate(Bundle savedInstanceState) { L10 super.onCreate(savedInstanceState); L11 setContentView(R.layout.main); L12 requestWindowFeature(Window.FEATURE_NO_TITLE); L13 } L11 L12 2011 8 25
16.
L22
… L09 @Override L10 public void onCreate(Bundle savedInstanceState) { L11 super.onCreate(savedInstanceState); L12 L13 LinearLayout layout1 = new LinearLayout(this); L14 LinearLayout layout2 = new LinearLayout(this); L15 LinearLayout layout3 = new LinearLayout(this); L16 Button button = new Button(this); L17 L18 layout1.addView(layout2); L19 L20 layout2.addView(layout1); layout3.addView(button); layout1 → layout2 → layout1 L21 L22 setContentView(layout1); layout1 → layout2 → layout3 … L23 } 2011 8 25
17.
“
” • ( ω ´) • • • ← • …… …… • … orz ← 2011 8 25
18.
“
” • • • • … • 2011 8 25
19.
void sort() {
List<String> list = new ArrayList<String>(); list.add("cupcake"); list.add(null); list.add("donuts"); list.add(null); list.add("froyo"); Collections.sort(list, new Comparator<String>() { @Override public int compare(String str1, String str2) { if (str1 == null) { return -1; } return str1.compareTo(str2); } }); Log.d("Debug", list.toString()); } NullPointerException … LogCat … 2011 8 25
20.
2011
8 25
21.
str2
null String#compareTo(String) null … 2011 8 25
22.
NPE(NullPointerException) 2011
8 25
23.
2011
8 25
24.
…
public class Util { /** * 2 1 . * @param list1 1 * @param list2 2 * @return 1 */ public static List<Object> merge(List<Object> list1, List<Object> list2) { list1.addAll(list2); return list1; } /** * 1 . * @param lists * @return 1 */ public static List<Object> merge(List<?>... lists) { List<Object> result = new ArrayList<Object>(); for (List<?> list : lists) { result.addAll(list); } return result; } } 2011 8 25
25.
public void test()
{ List<Object> list1 = new ArrayList<Object>(); list1.add("a"); list1.add("b"); List<Object> list2 = new ArrayList<Object>(); list2.add(1); list2.add(2); List<Object> list3 = new ArrayList<Object>(); list3.add(1.25); list3.add(2.5); List<Object> merged1 = Util.merge(list1, list2); List<Object> merged2 = Util.merge(list1, list2, list3); assertEquals(merged1.size(), 4); assertEquals(merged1.get(0), "a"); assertEquals(merged1.get(1), "b"); assertEquals(merged1.get(2), 1); assertEquals(merged1.get(3), 2); assertEquals(merged2.size(), 6); assertEquals(merged2.get(0), "a"); assertEquals(merged2.get(1), "b"); assertEquals(merged2.get(2), 1); assertEquals(merged2.get(3), 2); assertEquals(merged2.get(4), 1.25); assertEquals(merged2.get(5), 2.5); } 2011 8 25
26.
public void test()
{ List<Object> list1 = new ArrayList<Object>(); list1.add("a"); list1.add("b"); List<Object> list2 = new ArrayList<Object>(); list2.add(1); list2.add(2); List<Object> list3 = new ArrayList<Object>(); list3.add(1.25); list3.add(2.5); List<Object> merged1 = Util.merge(list1, list2); List<Object> merged2 = Util.merge(list1, list2, list3); assertEquals(merged1.size(), 4); assertEquals(merged1.get(0), "a"); assertEquals(merged1.get(1), "b"); assertEquals(merged1.get(2), 1); assertEquals(merged1.get(3), 2); size 8 assertEquals(merged2.size(), 6); assertEquals(merged2.get(0), "a"); assertEquals(merged2.get(1), "b"); assertEquals(merged2.get(2), 1); assertEquals(merged2.get(3), 2); assertEquals(merged2.get(4), 1.25); assertEquals(merged2.get(5), 2.5); } 2011 8 25
27.
Debug As ... 2011
8 25
28.
• F8
• F5 1 ( ) • F6 1 ( ) • F7 2011 8 25
29.
8
… 2011 8 25
30.
(
) 2011 8 25
31.
•
• , , • Variables • • 2011 8 25
32.
…
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨... 2011 8 25
33.
→Inspect 2011
8 25
34.
2011
8 25
35.
•
• • • • • 2011 8 25
36.
2011
8 25
37.
OpenGL 2011
8 25
38.
OpenGL http://t.co/bet4051 2011
8 25
39.
2011
8 25
Descargar ahora