SlideShare a Scribd company logo
1 of 25
KONKURS (a właściwie 2)
1. Wejdź na stronę bottega.com.pl/4dev
2.a Stwórz mema
- możesz stworzyć dowolną ilość memów
- wybierając jedną z 3 kategorii:
2.b Głosuj na śmieszne memy
- Azure na node.js zlicza punkty
na potrzeby 3.a
- Twój mózg w tle wydziela hormony
peptydowe (endorfiny)
3.a Wygraj jeden z trzech modeli drona 3.b Wylosuj wejściówkę na szkolenie
Domain Driven Design
11-13.05.16 Lublin
prowadzący: Sławomir Sobótka
4. Rozdanie nagórd (tylko dla obecnych) o 17:55 w sali Eksperci dla praktyków
WinDbg,
gdy Visual Studio to za mało...
Marcin Iwanowski
Dziwne, u mnie działa...
Marcin Iwanowski
w ciągu (niecałej) godziny
 (za) szybkie wprowadzenie do WinDbg
 ExploitMe
 wyjątek na produkcji
 post-mortem debugging
 hang
jak debugujemy nasze aplikacje?
 gdy możemy, podpinamy Visual Studio
 a gdy nie możemy?
 dyskusja na temat debugowania środowisk
testowych oraz produkcyjnych
 a jak debugujemy nie nasz kod?
WinDbg - wprowadzenie
 Debugging Tools for Windows
 Rozszerzenia:
 SOS
 SOSEX
WinDbg - komendy
 podpięcie debuggera
 symbole
 kontrola wykonania
 rozszerzenia
 breakpoint
 inspekcja obiektu
 dodatkowe komendy
WinDbg - wprowadzenie
 podpięcie debuggera
 ntsd [path], ntsd –p [PID], windbg
 symbole
 kontrola wykonania
 rozszerzenia
 breakpoint
 inspekcja obiektu
 dodatkowe komendy
WinDbg - wprowadzenie
 podpięcie debuggera
 symbole
 .symfix, .reload, .sympath [path]
 kontrola wykonania
 rozszerzenia
 breakpoint
 inspekcja obiektu
 dodatkowe komendy
WinDbg - wprowadzenie
 podpięcie debuggera
 symbole
 kontrola wykonania
 ctrl + c, g, p, pc, pt, t, q, qd
 rozszerzenia
 breakpoint
 inspekcja obiektu
 dodatkowe komendy
WinDbg - wprowadzenie
 podpięcie debuggera
 symbole
 kontrola wykonania
 rozszerzenia
 .load [path], .loadby [extension] [module]
 breakpoint
 inspekcja obiektu
 dodatkowe komendy
WinDbg - wprowadzenie
 podpięcie debuggera
 symbole
 kontrola wykonania
 rozszerzenia
 breakpoint
 bp, !bpmd –md [address], !name2ee, X, !mx, !m,
!mbp, !mbm
 inspekcja obiektu
 dodatkowe komendy
WinDbg - wprowadzenie
 podpięcie debuggera
 symbole
 kontrola wykonania
 rozszerzenia
 breakpoint
 inspekcja obiektu
 !ClrStack –a, !DumpObj [address], dd [address],
!mdt
 dodatkowe komendy
WinDbg - wprowadzenie
 podpięcie debuggera
 symbole
 kontrola wykonania
 rozszerzenia
 breakpoint
 inspekcja obiektu
 dodatkowe komendy
 !pe, u, !U, !DumpIL, !DumpStack, !Threads,
!EEStack, !GCRoot, !DumpHeap, .dump /ma
[filename]
problem 0: ExploitME
problem 1: wyjątek na produkcji
 pewnego pięknego poniedziałku... nasza
solucja NerdDinner załapała buga w search’u
pod adresem /home/MobileIndex
 polecenie od szefa: zdiagnozuj problem,
odpowiedz na pytanie „czy można problem
rozwiązać bez wdrażania nowej wersji?”,
jeżeli tak to rozwiąż go
 UWAGA: ludzie z IT na produkcji pozwolili
nam używać jedynie WinDbg
problem 2: post mortem debugging
 problem identyczny jak na poprzednim
slajdzie
 „ale zaraz zaraz jak to zatrzymać portal
na produkcji?”
problem 3: hang
 scenariusz 1: po zintegrowaniu StyleCopa
z projektem plan na bamboo zawiesza się
problem 3: hang
 scenariusz 2: raz na tydzień (czasem dwa)
aplikacja zawiesza się (100% CPU)
OS Thread Id: 0x27dc (124)
ESP EIP
2f77ed24 795b3c5c System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.__Canon, mscorlib]].FindEntry(Int32)
2f77ed3c 795b3835 System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.__Canon, mscorlib]].ContainsKey(Int32)
2f77ed40 209f1932 MyComponent.Settings.get_Current()
...
...
...
2f77f0a4 209f7545 ASP.MyApp_default_aspx.ProcessRequest(System.Web.HttpContext)
2f77f0a8 65fe6bfb System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
2f77f0dc 65fe3f51 System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)
2f77f11c 65fe7733 System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception)
2f77f16c 65fccbfe System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext,
System.AsyncCallback, System.Object)
2f77f188 65fd19c5 System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest)
2f77f1bc 65fd16b2 System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest)
2f77f1c8 65fcfa6d System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32)
2f77f3d8 79f047fd [ContextTransitionFrame: 2f77f3d8]
2f77f40c 79f047fd [GCFrame: 2f77f40c]
2f77f568 79f047fd [ComMethodFrame: 2f77f568]
podsumowanie
 (za) szybkie wprowadzenie do WinDbg
 ExploitMe
 wyjątek na produkcji
 post-mortem debugging
 hang
marcin@iwanowski.co
KONKURS (a właściwie 2)
1. Wejdź na stronę bottega.com.pl/4dev
2.a Stwórz mema
- możesz stworzyć dowolną ilość memów
- wybierając jedną z 3 kategorii:
2.b Głosuj na śmieszne memy
- Azure na node.js zlicza punkty
na potrzeby 3.a
- Twój mózg w tle wydziela hormony
peptydowe (endorfiny)
3.a Wygraj jeden z trzech modeli drona 3.b Wylosuj wejściówkę na szkolenie
Domain Driven Design
11-13.05.16 Lublin
prowadzący: Sławomir Sobótka
4. Rozdanie nagórd (tylko dla obecnych) o 17:55 w sali Eksperci dla praktyków
4Developers: Marcin Iwanowski- WinDbg, gdy Visual Studio to za mało...

More Related Content

Viewers also liked

4Developers: Krzysztof Staruch, Kamil Piechociak- Pracuj.pl - SOA zrobione (p...
4Developers: Krzysztof Staruch, Kamil Piechociak- Pracuj.pl - SOA zrobione (p...4Developers: Krzysztof Staruch, Kamil Piechociak- Pracuj.pl - SOA zrobione (p...
4Developers: Krzysztof Staruch, Kamil Piechociak- Pracuj.pl - SOA zrobione (p...PROIDEA
 
Suret - Lider obsługi transportu wewnętrznego
Suret - Lider obsługi transportu wewnętrznegoSuret - Lider obsługi transportu wewnętrznego
Suret - Lider obsługi transportu wewnętrznegoSuret
 
Taiwan Acacia in Full Blossom
Taiwan Acacia in Full BlossomTaiwan Acacia in Full Blossom
Taiwan Acacia in Full BlossomIvy Cheng
 
Henna asokawati 14 x-1
Henna asokawati 14 x-1Henna asokawati 14 x-1
Henna asokawati 14 x-1hennaasoka
 
11n1087 tanakatakuya
11n1087 tanakatakuya11n1087 tanakatakuya
11n1087 tanakatakuyatanakatakuya
 
Journal_Article_DEan_Gould_Branded_Journalism_And_Universities_2016
Journal_Article_DEan_Gould_Branded_Journalism_And_Universities_2016Journal_Article_DEan_Gould_Branded_Journalism_And_Universities_2016
Journal_Article_DEan_Gould_Branded_Journalism_And_Universities_2016Dean Gould
 
θρεπτικά συστατικά
θρεπτικά συστατικάθρεπτικά συστατικά
θρεπτικά συστατικάChrysoula Katsougkri
 
jQuery Framework - Property Content
jQuery Framework - Property ContentjQuery Framework - Property Content
jQuery Framework - Property Contentjagadeeshm
 
3Com 7900-000.017-1.00
3Com 7900-000.017-1.003Com 7900-000.017-1.00
3Com 7900-000.017-1.00savomir
 
ENV 222_Ecotourism
ENV 222_EcotourismENV 222_Ecotourism
ENV 222_EcotourismMariah Mund
 
Accuracy in sales
Accuracy in salesAccuracy in sales
Accuracy in salescharlesluke
 
Is it possible accomplishing the national development independent
Is it possible accomplishing the national development independentIs it possible accomplishing the national development independent
Is it possible accomplishing the national development independentFernando Alcoforado
 
Research medical imaging markets aarkstore.com
Research  medical imaging markets aarkstore.comResearch  medical imaging markets aarkstore.com
Research medical imaging markets aarkstore.comNeel Terde
 

Viewers also liked (18)

4Developers: Krzysztof Staruch, Kamil Piechociak- Pracuj.pl - SOA zrobione (p...
4Developers: Krzysztof Staruch, Kamil Piechociak- Pracuj.pl - SOA zrobione (p...4Developers: Krzysztof Staruch, Kamil Piechociak- Pracuj.pl - SOA zrobione (p...
4Developers: Krzysztof Staruch, Kamil Piechociak- Pracuj.pl - SOA zrobione (p...
 
Suret - Lider obsługi transportu wewnętrznego
Suret - Lider obsługi transportu wewnętrznegoSuret - Lider obsługi transportu wewnętrznego
Suret - Lider obsługi transportu wewnętrznego
 
A
AA
A
 
Taiwan Acacia in Full Blossom
Taiwan Acacia in Full BlossomTaiwan Acacia in Full Blossom
Taiwan Acacia in Full Blossom
 
Henna asokawati 14 x-1
Henna asokawati 14 x-1Henna asokawati 14 x-1
Henna asokawati 14 x-1
 
11n1087 tanakatakuya
11n1087 tanakatakuya11n1087 tanakatakuya
11n1087 tanakatakuya
 
ChanwitAranrit
ChanwitAranritChanwitAranrit
ChanwitAranrit
 
Journal_Article_DEan_Gould_Branded_Journalism_And_Universities_2016
Journal_Article_DEan_Gould_Branded_Journalism_And_Universities_2016Journal_Article_DEan_Gould_Branded_Journalism_And_Universities_2016
Journal_Article_DEan_Gould_Branded_Journalism_And_Universities_2016
 
θρεπτικά συστατικά
θρεπτικά συστατικάθρεπτικά συστατικά
θρεπτικά συστατικά
 
jQuery Framework - Property Content
jQuery Framework - Property ContentjQuery Framework - Property Content
jQuery Framework - Property Content
 
3Com 7900-000.017-1.00
3Com 7900-000.017-1.003Com 7900-000.017-1.00
3Com 7900-000.017-1.00
 
ENV 222_Ecotourism
ENV 222_EcotourismENV 222_Ecotourism
ENV 222_Ecotourism
 
Accuracy in sales
Accuracy in salesAccuracy in sales
Accuracy in sales
 
Is it possible accomplishing the national development independent
Is it possible accomplishing the national development independentIs it possible accomplishing the national development independent
Is it possible accomplishing the national development independent
 
введение в школьную жизнь
введение в школьную жизньвведение в школьную жизнь
введение в школьную жизнь
 
Día de san valentín
Día de san valentínDía de san valentín
Día de san valentín
 
Research medical imaging markets aarkstore.com
Research  medical imaging markets aarkstore.comResearch  medical imaging markets aarkstore.com
Research medical imaging markets aarkstore.com
 
театр
театртеатр
театр
 

Similar to 4Developers: Marcin Iwanowski- WinDbg, gdy Visual Studio to za mało...

Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerMarek Będkowski
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architectureJaroslaw Palka
 
Kivy na Androidzie
Kivy na AndroidzieKivy na Androidzie
Kivy na AndroidzieDaftcode
 
Zawód: Game Designer. Jak zacząć pracę w branży?
Zawód: Game Designer. Jak zacząć pracę w branży?Zawód: Game Designer. Jak zacząć pracę w branży?
Zawód: Game Designer. Jak zacząć pracę w branży?GameDesire Company
 
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnychPROIDEA
 
Testowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychTestowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychSecuRing
 
Pierwszy program w c# cezary walencik
Pierwszy program w c# cezary walencikPierwszy program w c# cezary walencik
Pierwszy program w c# cezary walencikCezary Walenciuk
 
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Michalis Kamburelis
 
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...CodiLime
 
Pułapki programowania obiektowego
Pułapki programowania obiektowego Pułapki programowania obiektowego
Pułapki programowania obiektowego Adam Sawicki
 
Jak nie zwariować z tymi pakietami
Jak nie  zwariować z tymi pakietamiJak nie  zwariować z tymi pakietami
Jak nie zwariować z tymi pakietamiArek Bee.
 
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...MarcinStachniuk
 
Bootloadery i programy bare metal.
Bootloadery i programy bare metal.Bootloadery i programy bare metal.
Bootloadery i programy bare metal.Semihalf
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Cezary Walenciuk
 

Similar to 4Developers: Marcin Iwanowski- WinDbg, gdy Visual Studio to za mało... (20)

Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architecture
 
Kivy na Androidzie
Kivy na AndroidzieKivy na Androidzie
Kivy na Androidzie
 
Zawód: Game Designer. Jak zacząć pracę w branży?
Zawód: Game Designer. Jak zacząć pracę w branży?Zawód: Game Designer. Jak zacząć pracę w branży?
Zawód: Game Designer. Jak zacząć pracę w branży?
 
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych
4Developers: Jarek Wojczakowski- Technologie w świecie gier mobilnych
 
Od Zera do Farmera
Od Zera do FarmeraOd Zera do Farmera
Od Zera do Farmera
 
Testowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychTestowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnych
 
Pierwszy program w c# cezary walencik
Pierwszy program w c# cezary walencikPierwszy program w c# cezary walencik
Pierwszy program w c# cezary walencik
 
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
 
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
 
[TestWarez 2017] Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
[TestWarez 2017]  Framework testowy aplikacji mobilnej dla systemu iOS - czy ...[TestWarez 2017]  Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
[TestWarez 2017] Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
 
Pułapki programowania obiektowego
Pułapki programowania obiektowego Pułapki programowania obiektowego
Pułapki programowania obiektowego
 
Jak nie zwariować z tymi pakietami
Jak nie  zwariować z tymi pakietamiJak nie  zwariować z tymi pakietami
Jak nie zwariować z tymi pakietami
 
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
 
Bootloadery i programy bare metal.
Bootloadery i programy bare metal.Bootloadery i programy bare metal.
Bootloadery i programy bare metal.
 
OpenEmbedded
OpenEmbeddedOpenEmbedded
OpenEmbedded
 
scenariusz-5-poszlaki
scenariusz-5-poszlakiscenariusz-5-poszlaki
scenariusz-5-poszlaki
 
01 - Wprowadzenie do TDD
01 - Wprowadzenie do TDD01 - Wprowadzenie do TDD
01 - Wprowadzenie do TDD
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012
 
WordCamp Poznan 2018
WordCamp Poznan 2018WordCamp Poznan 2018
WordCamp Poznan 2018
 

4Developers: Marcin Iwanowski- WinDbg, gdy Visual Studio to za mało...

  • 1. KONKURS (a właściwie 2) 1. Wejdź na stronę bottega.com.pl/4dev 2.a Stwórz mema - możesz stworzyć dowolną ilość memów - wybierając jedną z 3 kategorii: 2.b Głosuj na śmieszne memy - Azure na node.js zlicza punkty na potrzeby 3.a - Twój mózg w tle wydziela hormony peptydowe (endorfiny) 3.a Wygraj jeden z trzech modeli drona 3.b Wylosuj wejściówkę na szkolenie Domain Driven Design 11-13.05.16 Lublin prowadzący: Sławomir Sobótka 4. Rozdanie nagórd (tylko dla obecnych) o 17:55 w sali Eksperci dla praktyków
  • 2. WinDbg, gdy Visual Studio to za mało... Marcin Iwanowski
  • 3. Dziwne, u mnie działa... Marcin Iwanowski
  • 4.
  • 5. w ciągu (niecałej) godziny  (za) szybkie wprowadzenie do WinDbg  ExploitMe  wyjątek na produkcji  post-mortem debugging  hang
  • 6. jak debugujemy nasze aplikacje?  gdy możemy, podpinamy Visual Studio  a gdy nie możemy?  dyskusja na temat debugowania środowisk testowych oraz produkcyjnych  a jak debugujemy nie nasz kod?
  • 7.
  • 8. WinDbg - wprowadzenie  Debugging Tools for Windows  Rozszerzenia:  SOS  SOSEX
  • 9. WinDbg - komendy  podpięcie debuggera  symbole  kontrola wykonania  rozszerzenia  breakpoint  inspekcja obiektu  dodatkowe komendy
  • 10. WinDbg - wprowadzenie  podpięcie debuggera  ntsd [path], ntsd –p [PID], windbg  symbole  kontrola wykonania  rozszerzenia  breakpoint  inspekcja obiektu  dodatkowe komendy
  • 11. WinDbg - wprowadzenie  podpięcie debuggera  symbole  .symfix, .reload, .sympath [path]  kontrola wykonania  rozszerzenia  breakpoint  inspekcja obiektu  dodatkowe komendy
  • 12. WinDbg - wprowadzenie  podpięcie debuggera  symbole  kontrola wykonania  ctrl + c, g, p, pc, pt, t, q, qd  rozszerzenia  breakpoint  inspekcja obiektu  dodatkowe komendy
  • 13. WinDbg - wprowadzenie  podpięcie debuggera  symbole  kontrola wykonania  rozszerzenia  .load [path], .loadby [extension] [module]  breakpoint  inspekcja obiektu  dodatkowe komendy
  • 14. WinDbg - wprowadzenie  podpięcie debuggera  symbole  kontrola wykonania  rozszerzenia  breakpoint  bp, !bpmd –md [address], !name2ee, X, !mx, !m, !mbp, !mbm  inspekcja obiektu  dodatkowe komendy
  • 15. WinDbg - wprowadzenie  podpięcie debuggera  symbole  kontrola wykonania  rozszerzenia  breakpoint  inspekcja obiektu  !ClrStack –a, !DumpObj [address], dd [address], !mdt  dodatkowe komendy
  • 16. WinDbg - wprowadzenie  podpięcie debuggera  symbole  kontrola wykonania  rozszerzenia  breakpoint  inspekcja obiektu  dodatkowe komendy  !pe, u, !U, !DumpIL, !DumpStack, !Threads, !EEStack, !GCRoot, !DumpHeap, .dump /ma [filename]
  • 18. problem 1: wyjątek na produkcji  pewnego pięknego poniedziałku... nasza solucja NerdDinner załapała buga w search’u pod adresem /home/MobileIndex  polecenie od szefa: zdiagnozuj problem, odpowiedz na pytanie „czy można problem rozwiązać bez wdrażania nowej wersji?”, jeżeli tak to rozwiąż go  UWAGA: ludzie z IT na produkcji pozwolili nam używać jedynie WinDbg
  • 19. problem 2: post mortem debugging  problem identyczny jak na poprzednim slajdzie  „ale zaraz zaraz jak to zatrzymać portal na produkcji?”
  • 20. problem 3: hang  scenariusz 1: po zintegrowaniu StyleCopa z projektem plan na bamboo zawiesza się
  • 21. problem 3: hang  scenariusz 2: raz na tydzień (czasem dwa) aplikacja zawiesza się (100% CPU) OS Thread Id: 0x27dc (124) ESP EIP 2f77ed24 795b3c5c System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.__Canon, mscorlib]].FindEntry(Int32) 2f77ed3c 795b3835 System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.__Canon, mscorlib]].ContainsKey(Int32) 2f77ed40 209f1932 MyComponent.Settings.get_Current() ... ... ... 2f77f0a4 209f7545 ASP.MyApp_default_aspx.ProcessRequest(System.Web.HttpContext) 2f77f0a8 65fe6bfb System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 2f77f0dc 65fe3f51 System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef) 2f77f11c 65fe7733 System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception) 2f77f16c 65fccbfe System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, System.Object) 2f77f188 65fd19c5 System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest) 2f77f1bc 65fd16b2 System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest) 2f77f1c8 65fcfa6d System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32) 2f77f3d8 79f047fd [ContextTransitionFrame: 2f77f3d8] 2f77f40c 79f047fd [GCFrame: 2f77f40c] 2f77f568 79f047fd [ComMethodFrame: 2f77f568]
  • 22. podsumowanie  (za) szybkie wprowadzenie do WinDbg  ExploitMe  wyjątek na produkcji  post-mortem debugging  hang
  • 24. KONKURS (a właściwie 2) 1. Wejdź na stronę bottega.com.pl/4dev 2.a Stwórz mema - możesz stworzyć dowolną ilość memów - wybierając jedną z 3 kategorii: 2.b Głosuj na śmieszne memy - Azure na node.js zlicza punkty na potrzeby 3.a - Twój mózg w tle wydziela hormony peptydowe (endorfiny) 3.a Wygraj jeden z trzech modeli drona 3.b Wylosuj wejściówkę na szkolenie Domain Driven Design 11-13.05.16 Lublin prowadzący: Sławomir Sobótka 4. Rozdanie nagórd (tylko dla obecnych) o 17:55 w sali Eksperci dla praktyków

Editor's Notes

  1. dotpeeka włączyć przed prezentacją solucję asp.net web odpalić wcześniej otworzyć C:\Users\Marcinii\Desktop\Bamboo\SampleApp 15 minut - zajęło mi demo z pierwszą aplikacją i wstęp 10 minut - demo z debugowaniem problemu na produkcji 5 minut - post mortem 10 minut - stylecop 5 minut - hang 100% 5 minut - memory leak
  2. Oraz głównie programista Sharepoint a właściwie to człowiek od rozwiązywania problemów w aplikacji .NET Chciałbym dziś Wam przybliżyć trochę faktycznie moją pracę
  3. rozgrzewka – żebyśmy przestawili się w tryb debugowania
  4. zapisywać wszystko co powiedzą używamy Console.WriteLine, albo MessageBox  logujemy co robimy na śodowisku testowym? próbujemy odtworzyć problem u siebie, jak możemy kopiujemy dane do siebie możemy wdrożyć bibliotekę z większym poziomem logowania, albo przełączyć na większy poziom debugowania klikamy ile się da żeby odkryć przyczynę problemu co robimy na środowisku produkcyjnym? monitoring standardowych logów czasem wolno nam włączyć bardziej szczegółowe logowanie zwykle nie możemy klikać próbujemy odtworzyć problem na innych maszynach kopiujemy dane do siebie (o ile możemy)
  5. tak naprawdę większość naszych działań zmierzają na początku do tego: a później zaczyna się główkowanie a tak naprawdę sednem jest to czy używamy odpowiednich narzędzi do diagnozy problemu szukamy stacktrace -> jak już wiemy to przyglądamy się tak długo aż na coś wpadniemy -> możemy chcieć podglądać zawartość pamięci
  6. pierwsze podstawowe narzędzia i jedne z najbardziej potęznych narzędzie do starcza nam Microsoft https://msdn.microsoft.com/en-us/windows/hardware/hh852365 http://rxwen.blogspot.com/2010/04/standalone-windbg-v6120002633.html C:\Program Files (x86)\Windows Kits\10\Debuggers\x86 Dodatkowo dodatki: SOS i SOSEX
  7. a teraz kilka słów o komendach które są dość często używane w tym narzędziu
  8. class Simple { static void Main(string[] args) { System.Console.WriteLine("Welcome to Advanced .NET Debugging!"); System.Console.WriteLine("Press any key to exit"); System.Console.ReadKey(); } } ntsd ntsd [path] symbol path nie został ustawiony (o tym zaraz) wylistowane załadowane moduły break instruction excpetion – zawsze gdy podpinamy debugger jest zatrzymuje on dzaiałanie aplikacji i użytkownik może coś teraz zrobić target – zwykle 0 a co gdy mamy już uruchomiony proces? skąd PID procesu mieć? tlist tym razem dużó więcej modułów zostało załadowanych można pokazać cdb
  9. najpierw .reload uruchomić .symfix i .reload i tym razem wszystkie dll’ki zostały załadowane poprawnie .pdb pomocne także w przypadku aplikacji .NET publiczne i prywatne
  10. zademonstrować: ctrl + c i g ntsd –g [path] uruchomi aplikację bez zatrzymania instrukcje do poniższego: .symfix .reload .g Press any key CTRL+C .loadby sos clr !name2ee Breakpoint3.exe Breakpoint3.Breakpoint.AddAndPrint szukamy JITTED code Address bp JITTED code address g g eip pokazuje w jakiej funkcji jesteśmy/ w jakiej linijce u – pokazuje kilka następnych linii t wchodzi w call p nie wchodzi w call pusta komenda powtarza pc do call’a pt do końca funkcji class Breakpoint { static void Main(string[] args) { Console.WriteLine("Press any key (1st instance function)"); Console.ReadKey(); Breakpoint bp = new Breakpoint(); bp.AddAndPrint(10, 5); Console.WriteLine("Press any key (2nd instance function)"); Console.ReadKey(); bp = new Breakpoint(); bp.AddAndPrint(100, 50); Console.WriteLine("Press any key (static function)"); Console.ReadKey(); AddAndPrintStatic(20, 15); } public void AddAndPrint(int a, int b) { int res = a + b; Console.WriteLine("Adding {0}+{1}={2}", a, b, res); } public static void AddAndPrintStatic(int a, int b) { int res = a + b; Console.WriteLine("Adding {0}+{1}={2}", a, b, res); } }
  11. .load – trzeba znaleźć odpowiednią wersję - można pokazać, trzeba dodatkowo / robić dlaczego sos jest w różnych wersjach, bo implementujesz szczeóły które różnią się w każdym CLR żeby móc go debugować ale lepszy jest loadby
  12. NIE WCHODZIĆ W SZCZEGÓŁY bp – niby proste, zacznijmy od notepada w .NET jest troszkę trudniej ntsd notepad .symfix .reload X notepad!*Save* szukamy adres SaveFile bp notepad!SaveFile g i zachować jakiś plik teraz jeszcze raz z brekpointem demo !name2ee – potrafi sprawdzić czy funkcja już zostałą z jitowana .loadby sos clr !name2ee Breakpoint3.exe Breakpoint3.Breakpoint.AddAndPrint szukamy JITTED code Address !U adresmetody postawić breakpointa bp [address] i jak breakpoint uderzy to !ClrStack !bpmd Breakpoint3.exe Breakpoint3.Breakpoint.AddAndPrint a teraz demo kiedy funkcja nie jest zjitowana włączyć do pierwszej spacji ctrl + c !name2ee Breakpoint3.exe Breakpoint3.Breakpoint.AddAndPrint pokazać że jest not jitted !bpmd -md 00844ce0 stawia breakpointa !mx 2.2.KontrolaWykonania!*Add* !mbm 2.2.KontrolaWykonania!*Add* kiedyś też można było się dowiedzieć o adresie ale trzeba było postawić breakpoint w samym kodzie jita który zapisywał adres funkcji a co to jest NGEN? popatrzmy na ścieżkę podczas ładowania modułów %windir%\assembly\NativeImages_v2.0.50727_<architecture> tworzenie obrazu: %windir%\microsoft.net\framework\v2.0.50727\ngen install 03ObjTypes.exe debugowanie niczym się nie różni, metody już będą skompilowane przez JIT !bpmd 03ObjTypes.exe Advanced.NET.Debugging.Chapter3.Comparer`1.GreaterThan !bpmd 03ObjTypes.exe Advanced.NET.Debugging.Chapter3.Comparer`2.GreaterThan – dwa typy generyczne public class ObjTypes { public struct Coordinate { public int xCord; public int yCord; public int zCord; public Coordinate(int x, int y, int z) { xCord = x; yCord = y; zCord = z; } } private Coordinate coordinate; int[] intArray = new int[] { 1, 2, 3, 4, 5 }; string[] strArray = new string[] {"Welcome", "to", "Advanced", ".NET", "Debugging"}; static void Main(string[] args) { Coordinate point = new Coordinate(100, 100, 100); Console.WriteLine("Press any key to continue (AddCoordinate)"); Console.ReadKey(); ObjTypes ob = new ObjTypes(); ob.AddCoordinate(point); Console.WriteLine("Press any key to continue (Arrays)"); Console.ReadKey(); ob.PrintArrays(); Console.WriteLine("Press any key to continue (Generics)"); Console.ReadKey(); Comparer<int> c = new Comparer<int>(); Console.WriteLine("Greater {0}", c.GreaterThan(5, 10)); Console.WriteLine("Press any key to continue (Exception)"); Console.ReadKey(); ob.ThrowException(null); } public void AddCoordinate(Coordinate coord) { coordinate.xCord += coord.xCord; coordinate.yCord += coord.yCord; coordinate.zCord += coord.zCord; Console.WriteLine("x:{0}, y:{1}, z:{2}", coordinate.xCord, coordinate.yCord, coordinate.xCord); } public void PrintArrays() { foreach (int i in intArray) { Console.WriteLine("Int: {0}", i); } foreach (string s in strArray) { Console.WriteLine("Str: {0}", s); } } public void ThrowException(ObjTypes obj) { if (obj == null) { throw new System.ArgumentException("Obj cannot be null"); } } } public class Comparer<T> where T : IComparable { public T GreaterThan(T d, T d2) { int ret = d.CompareTo(d2); if (ret > 0) return d; else return d2; } public T LessThan(T d, T d2) { int ret = d.CompareTo(d2); if (ret < 0) return d; else return d2; } }
  13. ntsd aplikacja .symfix .reload g ctrl+c .loadby sos clr !ClrStack pokazuje się unable bo potrzeba zmienić wątek, nie zatrzymaliśmy się w wątku natywnym ~0s !ClrStack już działa !ClrStack –a wyświetla szczegóły parametrów i lokalnych rzeczy po pierwsze musimy się dowiedzieć czy zmienna jest klasą czy strukturą !DumpObj [adres] widać że to nie obiekt, r – pokaże rejestrj esp (stack pointer) – widać że zawie podobny adres do naszego więc nasza zmienna jest na stosie więc robimy d [adres] – widać wartości 100 DEMO2: !bpmd ObjTypes3.exe ObjTypes3.ObjTypes.AddCoordinate g g !DumpObj [adres thisa] – widać jakie pola ma obiekt Metadata Table – opisuje jak wygląda dany obiekt, Field 4000 0001 (to jest pole i offset tego pola w MT) VT – 1 to oznacza że to jest ValueType dd 02e34e98+0xc – adres obiektu plus offset żeby zobaczyć wartość pola albo lepiej tak: !DumpVC 0x010a4dac 0x02e34ea4 – pierwszy adres to adres memory table, a drugi adres to value danego obiektu widać ładnie nazwy zmiennych DEMO3: g do arrays !do drugiego localsa z maina (ObjTypes) teraz możemy zrobić !DumpObj intArray lub d adres intarray – zwrócić uwagę że ilość elementów jest zapisana w drugim sektorze !DumpObj strArray !DumpObj –nofields pierwszego elementu na szczęście jest !DumpArray !DumpArray –details intArray lub strArray DEMO4: Pamiętacie żeby odnaleźć obiektu musiałem zrobić !ClrStack –a a później znaleźć localsa odpowiedniego Ale można prościej używająć !DumpStackObjects (można ograniczyć pamięć) wykonać: !DumpStackObjects !DumpObj adres sometype pokazać jeszcze że !DumpObj size jest różny od !ObjSize na przykładzie ObjTypes Kod: public class ObjTypes { public struct Coordinate { public int xCord; public int yCord; public int zCord; public Coordinate(int x, int y, int z) { xCord = x; yCord = y; zCord = z; } } private Coordinate coordinate; int[] intArray = new int[] { 1, 2, 3, 4, 5 }; string[] strArray = new string[] {"Welcome", "to", "Advanced", ".NET", "Debugging"}; static void Main(string[] args) { Coordinate point = new Coordinate(100, 100, 100); Console.WriteLine("Press any key to continue (AddCoordinate)"); Console.ReadKey(); ObjTypes ob = new ObjTypes(); ob.AddCoordinate(point); Console.WriteLine("Press any key to continue (Arrays)"); Console.ReadKey(); ob.PrintArrays(); Console.WriteLine("Press any key to continue (Generics)"); Console.ReadKey(); Comparer<int> c = new Comparer<int>(); Console.WriteLine("Greater {0}", c.GreaterThan(5, 10)); Console.WriteLine("Press any key to continue (Exception)"); Console.ReadKey(); ob.ThrowException(null); } public void AddCoordinate(Coordinate coord) { coordinate.xCord += coord.xCord; coordinate.yCord += coord.yCord; coordinate.zCord += coord.zCord; Console.WriteLine("x:{0}, y:{1}, z:{2}", coordinate.xCord, coordinate.yCord, coordinate.xCord); } public void PrintArrays() { foreach (int i in intArray) { Console.WriteLine("Int: {0}", i); } foreach (string s in strArray) { Console.WriteLine("Str: {0}", s); } } public void ThrowException(ObjTypes obj) { if (obj == null) { throw new System.ArgumentException("Obj cannot be null"); } } } public class Comparer<T> where T : IComparable { public T GreaterThan(T d, T d2) { int ret = d.CompareTo(d2); if (ret > 0) return d; else return d2; } public T LessThan(T d, T d2) { int ret = d.CompareTo(d2); if (ret < 0) return d; else return d2; } }
  14. uruchomić aplikację ntsd ObjTypes3.exe nie pauzować do momentu rzucenia wyjątku widzimy ładnie co zostało rzucone jak chcemy podejrzeć szczegóły to: !Threads !do ades wyjątku !do –nofields adres pola _message albo prościej !pe
  15. !DumpStack -EE !U adres funkcji !DumpIL method descriptor bp na adres instrukcji cmp czekamy na bp !ClrStack -a szukamy adresu lokalnej zmiennej z license is valid przez okno memory zmieniamy wartosc g
  16. rozwiązanie: sxe clr !ClrStack !U /d adres metody bp w miejscu gdzie result będzie już wypełniony !ClrStack –a i brak danych o tej zmiennej, bo włączone są optymalizacje w release, ale !dso już działa result przeczytać w okienku memory http://www.geonames.org/login i znów włączyć, znów błąd ale inny na http://www.geonames.org/ w profilu trzeba pozwolić na web service username=marcinii&amp; i bingo - naprawione w tej aplikacji występuje jeszcze jeden problem – brak folderu Logs można porozmawiać o Debug/Release jak ułatwić diagnozowanie tego typu problemów? więcej logów
  17. adplus skonfigurowany na robienie dumpa, adplus częścią narzędzie do debugowania https://msdn.microsoft.com/en-us/library/windows/hardware/ff537953(v=vs.85).aspx zamiast sxe clr można użyć soe !soe -Create System.Data.SqlClient.SqlException .dump /mf [path] Task Manager
  18. Hang może być różny, najczęsciej: aplikacja faktycznie coś robi aplikacja robi coś w kółko deadlock C:\Users\Marcinii\Desktop\Bamboo\SampleApp SampleApp uwaga na wersję MSBuild, trzeba zmienić w .bat po uruchomieniu i zatrzymaniu w momenciu zwisu: !DumpStack –EE szukamy StyleCop przełączamy się na wątek !ClrStack odnajdujemy metodę która przekazuje nazwę folderu – sprawdzić tą nazwę nie wolno: ruszać aplikacji z folderu Program Files poza tym wszystko inne dozwolone zawieszenei aplikacji normalnie bada się przez zrobienie kilku zrzutów typu hang i porównanie ich ze sobą
  19. przydatna komenda !runaway opisane na blogu msdn: https://blogs.msdn.microsoft.com/tess/2009/12/21/high-cpu-in-net-app-using-a-static-generic-dictionary/
  20. !DumpHeap –type Person !DumpHeap /d -mt 00f6aa68 !GCRoot address raczej rzadko zdarza się klasyczny wyciek pamięci (choć jest możliwy) to my nie zwolniliśmy jakiegoś obiektu (lub 3rd party) !do i zobaczyć size !ObjSize size wszystkich elementów
  21. na koniec na pewno powiedzieć że te problemy nie debuguje się w 15 minut