Производительность LLDB Breakpoints - чего мне ожидать? - PullRequest
0 голосов
/ 14 января 2020

Я написал скрипт, который добавляет множество точек останова к моему iOS проекту. Каждая точка останова имеет команду, которая вызывает некоторый код журнала и продолжается без остановки.

Во время выполнения моего проекта эти точки останова называются десятками, если не сотнями раз в секунду. К сожалению, производительность приложения упала после добавления этих точек останова. Это в значительной степени не отвечает, поскольку выполнение точек останова замедляет процесс.

Мой вопрос здесь: это нормально? Являются ли затраты производительности для точек останова настолько значительными?

Я вставляю ниже часть моего python сценария из ~/.lldb:

...
for funcName in funcNames:
   breakpointCommand = f'breakpoint set -n {funcName} -f {fileName}'
   lldb.debugger.HandleCommand(breakpointCommand)
   lldb.debugger.HandleCommand('breakpoint command add --script-type python --python-function devTrackerScripts.breakpoint_callback')
def breakpoint_callback(frame, bp_loc, dict):
   lineEntry = frame.GetLineEntry()
   functionName = frame.GetDisplayFunctionName()
   expression = f'expr -- proofLog(lineEntry: "{lineEntry}", function: "{functionName}")'

   lldb.debugger.HandleCommand(expression)

   return False

1 Ответ

2 голосов
/ 14 января 2020

Точки останова сложно сделать высокопроизводительными.

Они включают в себя исключение в процессе отладки, затем переключение контекста на отладчик для обработки исключения, затем пошаговое переключение на исходную инструкцию, которое включает еще пару переключений контекста и еще одно исключение после одного шага , Затем еще один, чтобы запустить процесс снова. Когда вы отлаживаете устройство iOS, добавьте traffi c с устройства iOS к вам Ma c для всех переключений контекста.

И в вашем случае вы также вызываете функцию на каждой остановке, что означает компиляцию выражения, загрузку его в процесс и выполнение кода.

Было бы интересно узнать, Удар по точкам останова вызывает большую часть замедления, или, если вас больше всего замедляет оценка выражений. Если доминирует оценка выражений, то, возможно, вы могли бы придумать другой способ достижения этого эффекта?

...