Как напечатать идентификатор точки останова в lldb - PullRequest
0 голосов
/ 08 января 2019

Если я установил точку останова с автоматическим продолжением с помощью команды, как я могу также распечатать идентификатор точки останова, чтобы я знал, какая точка останова отображает команду.

В приведенном ниже списке мне нужно

br команда add "print brk-id" 27

Но что это за команда, я не нахожу ее в документации или здесь на SO.

    Current breakpoints:
27: regex = 'coordinateReadingItemAtURL', module = Foundation, locations = 28, resolved = 28, hit count = 16 Options: enabled auto-continue
    Breakpoint commands:
      po $rdx

  27.1: where = Foundation`-[NSFileCoordinator coordinateReadingItemAtURL:options:error:byAccessor:], address = 0x00007fff534d2642, resolved, hit count = 3
  27.2: where = Foundation`-[NSFileCoordinator(NSPrivate) _coordinateReadingItemAtURL:options:error:byAccessor:], address = 0x00007fff534d2695, resolved, hit count = 3
  27.3: where = Foundation`__85-[NSFileCoordinator(NSPrivate) _coordinateReadingItemAtURL:options:error:byAccessor:]_block_invoke_2, address = 0x00007fff534d4d44, resolved, hit count = 2
  27.4: where = Foundation`__85-[NSFileCoordinator(NSPrivate) _coordinateReadingItemAtURL:options:error:byAccessor:]_block_invoke.404, address = 0x00007fff534d52bf, resolved, hit count = 2
  27.5: where = Foundation`__73-[NSFileCoordinator coordinateReadingItemAtURL:options:error:byAccessor:]_block_invoke, address = 0x00007fff534d5330, resolved, hit count = 2
  27.6: where = Foundation`__73-[NSFileCoordinator coordinateReadingItemAtURL:options:error:byAccessor:]_block_invoke_2, address = 0x00007fff534d5559, resolved, hit count = 2
  27.7: where = Foundation`__85-[NSFileCoordinator(NSPrivate) _coordinateReadingItemAtURL:options:error:byAccessor:]_block_invoke_2.405, address = 0x00007fff534d60e3, resolved, hit count = 2

1 Ответ

0 голосов
/ 09 января 2019

Я не думаю, что есть команда, которая будет печатать только идентификатор точки останова. Самое близкое, что я знаю, это thread info:

br command add -o "thread info"

Это напечатает кучу данных с идентификатором точки останова в самом конце:

thread #1: tid = 0x2220c5, 0x000000010b6cc4dd SomeSDK`-[ABClass method:], queue = 'com.apple.main-thread', stop reason = breakpoint 1.1

Эти данные контролируются настройкой thread-format. Вы можете изменить значение по умолчанию, чтобы оно было более кратким, например:

settings set thread-format "thread #${thread.index}{, stop reason = ${thread.stop-reason}}"

При этом thread info показывает:

thread #1, stop reason = breakpoint 1.1

Имейте в виду, что этот параметр используется в других местах, а изменения могут отображаться в других местах.

Наконец, вы можете прибегнуть к Python API. Эта команда напечатает идентификатор точки останова:

br command add -s python -o 'print "{}.{}".format(bp_loc.GetBreakpoint().GetID(), bp_loc.GetID())'

Чтобы объяснить это, команды точки останова Python на самом деле являются функцией, вы можете запустить break list, чтобы посмотреть, как ее вызовет lldb. Одним из аргументов является bp_loc, то есть SBBreakpointLocation. Чтобы напечатать полный идентификатор точки останова, этот код объединяет два значения идентификатора: bp_loc.GetBreakpoint().GetID() и bp_loc.GetID().

Для удобства повторного использования вы можете поместить это в файл где-нибудь, например helpers.py.

# helpers.py
def brk_id(frame, bp_loc, internal_dict):
    bp_id = bp_loc.GetBreakpoint().GetID()
    loc_id = bp_loc.GetID()
    print "{}.{}".format(bp_id, loc_id)

Тогда в вашем ~/.lldbinit вы импортируете это так:

command script import path/to/helpers.py

И теперь вы можете легко использовать вспомогательную функцию:

br command add -F helpers.brk_id
...