«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep

  • 350 views
Uploaded on

Доклад о том, как можно использовать утилиту dtrace для отладки iOS приложений. Эта утилита может быть полезна при отладке сложных случаев, когда необходимо задать какие-либо правила для фильтрации …

Доклад о том, как можно использовать утилиту dtrace для отладки iOS приложений. Эта утилита может быть полезна при отладке сложных случаев, когда необходимо задать какие-либо правила для фильтрации вызываемых функций.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
350
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. dtrace отладка iOS приложений с помощью dtrace
  • 2. В двух словах • вызовы функций • скрипты • OS X / iOS Simulator
  • 3. История • truss (Unix) • strace (Linux) • dtrace (Sun OS, OS X)
  • 4. Скрипт <probe description> [/predicate/] {      <actions> } 
  • 5. Скрипт Точка трассировки syscall::read:entry Дополнительное условие /execname == “bash”/ {      printf(“bash with pid %d called writen”,pid); }  Действия
  • 6. Скрипт CPU ID 0 155 0 155 1 155 1 155 FUNCTION:NAME read:entry bash with pid 2958 called write read:entry bash with pid 444 called write read:entry bash with pid 448 called write read:entry bash with pid 448 called write
  • 7. Точки трассировки syscall, pid, objc read, write, +alloc provider:module:function:name libc++.1.dylib, mach_kernel имя зонда (probe)
  • 8. Точки трассировки syscall::read:entry вход в функцию read для всех процессов
  • 9. Точки трассировки syscall::read:return выход из read для всех процессов
  • 10. Точки трассировки pid1234::read: выход и выход из read для процесса с pid: 1234
  • 11. Точки трассировки objc123:NSString:-*:entry вход во все методы NSString для процесса 123
  • 12. Точки трассировки syscall::read:entry,
 syscall::write:entry Можно указывать несколько через запятую
  • 13. Точки трассировки BEGIN END Специальные точки
  • 14. Скрипт syscall::read:entry Дополнительное условие /execname == “bash”/ {      printf(“bash with pid %d called writen”,pid); } 
  • 15. Предикат /expression/
  • 16. Предикат execname, pid, tid
  • 17. Предикат arg0..argX args[0]..args[X]
  • 18. Предикат перменные скрипта
  • 19. Скрипт syscall::read:entry /execname == “bash”/ {      printf(“bash with pid %d called writen”,pid); }  Действия
  • 20. Скрипт • Переменные • Вызов функций • Нет циклов и ветвлений
  • 21. trace syscall::read:entry{trace(execname)} ! CPU ID 1 155 FUNCTION:NAME read:entry Google Chrome H trace
  • 22. printf syscall::read:entry{printf(“arg0: %d”, arg0)} ! CPU ID 0 155 FUNCTION:NAME read:entry arg0: 7 printf
  • 23. ustack syscall::read:entry{ustack()} ! CPU ID FUNCTION:NAME 1 155 read:entry libsystem_kernel.dylib`read+0xa CFNetwork`__CFSocketReadWithError(__CFSocket*, unsigned char*, long, CFStreamError*)+0x1e CFNetwork`SocketStream::socketRead(unsigned char*, long, CFStreamError*)+0x1c
  • 24. Что можно делать • Анализ приложений и драйверов с применением сложных фильтров • Профилирование памяти для конкретных объектов • Профилирование производительности
  • 25. DEMO
  • 26. Что не умеет • вызывать методы и функции пользовательского кода • обращаться к мемберам объектов • выводить NSString • не работает на девайсе
  • 27. Указатели копирует во временный буфер printf(“%d”, copyin(arg0, 4)); указатель на int
  • 28. С-strings printf(“%s”, arg0); ! printf(“%s”, copyinstr(arg0)); указатель на c-string
  • 29. “Фишки” D • автоматическое объявление переменных • все массивы – ассоциативные • • proc[execname, tid]++ аггрегации • @counts["write system calls"] = count();
  • 30. Стандартные скрипты • dtruss – эмуляция truss • iosnoop, iotop – анализ работы с диском • execsnoop – запуск новых процессов • man -k dtrace – полный список
  • 31. Instruments
  • 32. Дополнительная информация • man dtrace • http://www.oracle.com/technetwork/server-storage/solaris10/solaris-dtracewp-167895.pdf • http://docs.oracle.com/cd/E19253-01/817-6223/ • http://www.tablespace.net/quicksheet/dtrace-quickstart.html • http://www.brendangregg.com/dtrace.html#DTraceToolkit • http://initwithfunk.com/blog/2013/05/31/breaking-bad-with-dtrace/ • http://www.friday.com/bbum/2008/01/26/objective-c-printing-class-name-fromdtrace/ • http://reverse.put.as/wp-content/uploads/2011/06/Debugging-Cocoa-withDTrace.pdf