Комментарии 3
А зачем перебирать все фреймы? Если мы хотим адрес на локальную переменную, то и смотреть нужно только в активный фрейм, нет? Как минимум, это наверняка сократит поиск в наиболее частом случае. Вот если не нашли в текущем, можно попробовать и остальные посмотреть, хотя пока непонятно, зачем
Контр-пример на идею смотреть только на активный фрейм потока:
int foo(int n) {
int x;
if (n) {
foo(n - 1);
}
}
Рассмотрим момент foo(0)
, спросим про указатель на x
(которая все еще жива) в момент вызова foo(n)
— в текущем фрейме foo(0)
мы ее не найдем.
Собрать статистику по тому насколько часто буду спрашивать указатель на переменную активного фрейма текущего потока, в зависимости от этого добавить эвристику "сначала проверить текущий активный фрейм, а потом уже все остальные" — идея хорошая.
*Сделав глоток чая, запустил отладчик Visual Studio*
Учим LLDB уточнять указатели на локальные переменные