SlideShare a Scribd company logo
(@v vakame)


                Android




2011   8   25
•

                •

                •




                    http://www.slideshare.net/vvakame/debugging-strategy


2011   8   25
2011   8   25
2011   8   25
…




2011   8   25
•

                    • initA()      initB()        init()
                                    A, B public
                •              2

                    •      (          )
                    •
                •                         …
2011   8   25
/**
    *           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
/**
    *           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
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
ADT


                      2011/08/25   rev12

2011   8   25
2011   8   25
•

                    •

                    •

                    • null




2011   8   25
• LogCat




2011   8   25
•

 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
•
       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
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
“      ”
                •              (     ω   ´)

                    •

                    •

                    •                    ←

                    • ……                      ……

                    •              … orz ←
2011   8   25
“       ”
                •

                •

                •

                    •
                            …

                    •

2011   8   25
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
2011   8   25
str2   null
            String#compareTo(String)   null   …

2011   8   25
NPE(NullPointerException)


2011   8   25
2011   8   25
…
                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
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
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
Debug As ...




2011   8   25
• F8

                • F5 1   (   )

                • F6 1   (       )

                • F7




2011   8   25
8   …


2011   8   25
(   )
2011   8   25
•
                    •               ,   ,
                    •   Variables
                •
                    •
2011   8   25
…
                ¨   ¨   ¨   ¨   ¨   ¨   ¨   ¨...
2011   8   25
→Inspect




2011   8   25
2011   8   25
•

                •

                •

                •

                •

                •
2011   8   25
2011   8   25
OpenGL




2011   8   25
OpenGL




  http://t.co/bet4051

2011   8   25
2011   8   25

More Related Content

PDF
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
PPTX
Java весна 2013 лекция 6
PDF
JQuery
PDF
Jeffri ferdinand panjaitan 17.01.132 (ti4 c)
PDF
1- Sourcecode Array
PPT
Шаблоны проектирования 2
PDF
Java & le pattern matching
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Java весна 2013 лекция 6
JQuery
Jeffri ferdinand panjaitan 17.01.132 (ti4 c)
1- Sourcecode Array
Шаблоны проектирования 2
Java & le pattern matching

What's hot (14)

PDF
An introduction to functional programming with Go [redux]
PDF
python-geohex
PPTX
20150415 csharp6.0
PDF
Boost.勉強会#4 Boost.Proto
PDF
Reactive x
DOCX
All set1
DOC
Java
PDF
Programación funcional en Haskell
DOCX
EJEMPLOS DESARROLLADOS
PPT
Tugas pw [10]
PPT
Tugas pw [10]
PPT
Spring Framework Orm Di
PDF
Most Common JavaScript Mistakes
PDF
FP is coming... le 19/05/2016
An introduction to functional programming with Go [redux]
python-geohex
20150415 csharp6.0
Boost.勉強会#4 Boost.Proto
Reactive x
All set1
Java
Programación funcional en Haskell
EJEMPLOS DESARROLLADOS
Tugas pw [10]
Tugas pw [10]
Spring Framework Orm Di
Most Common JavaScript Mistakes
FP is coming... le 19/05/2016
Ad

Viewers also liked (8)

PPTX
Le rapport gallois 2012
PDF
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
PDF
俺とお前とGoogleware
PDF
JavaScript再入門
PDF
JavaScript 再入門2
PDF
TypeScript 独習会
PDF
TypeScript Hands-on
Le rapport gallois 2012
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
俺とお前とGoogleware
JavaScript再入門
JavaScript 再入門2
TypeScript 独習会
TypeScript Hands-on
Ad

More from Masahiro Wakame (20)

PDF
GoCon2016 spring 自作Webフレームワーク uconを作った話
PDF
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
PDF
ng-japan 2015 TypeScript+AngularJS 1.3
PDF
TypeScriptは明日から使うべき
PDF
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
PDF
Google Glass XE17版
PDF
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
PDF
コンパイラ指向ReVIEW
PDF
20ヶ月を取り戻す Dart flight school
PDF
Google Glassでできること XE11版 最新開発情報 Mirror API & GDK
PDF
ReVIEW & CI - ChefでCI環境構築
PDF
Firefox OS勉強会 2nd TypeScript+AngularJS
PDF
AngularJS+TypeScript - AngularJS 1周年記念勉強会
PDF
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
PDF
Datastoreへのアクセスを楽してMemcacheアクセスに置き換えるライブラリ作った
PDF
TypeScript 勉強会
PDF
わかめモナ化LT
PDF
NFC app launcher
PDF
函館IKA Eclipse活用術
PDF
函館IKA ICS開発情報
GoCon2016 spring 自作Webフレームワーク uconを作った話
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
ng-japan 2015 TypeScript+AngularJS 1.3
TypeScriptは明日から使うべき
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Google Glass XE17版
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
コンパイラ指向ReVIEW
20ヶ月を取り戻す Dart flight school
Google Glassでできること XE11版 最新開発情報 Mirror API & GDK
ReVIEW & CI - ChefでCI環境構築
Firefox OS勉強会 2nd TypeScript+AngularJS
AngularJS+TypeScript - AngularJS 1周年記念勉強会
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Datastoreへのアクセスを楽してMemcacheアクセスに置き換えるライブラリ作った
TypeScript 勉強会
わかめモナ化LT
NFC app launcher
函館IKA Eclipse活用術
函館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
  • 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
  • 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
  • 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
  • 34. 2011 8 25
  • 35. • • • • • 2011 8 25
  • 36. 2011 8 25
  • 37. OpenGL 2011 8 25
  • 39. 2011 8 25