Отладка назад

Сообщение об ошибке как бы подсказывает вам одно решение: внедрите init(layer:) в CPCoursePointLayer.

Когда вы устанавливаете свойство для слоя, и этот слой находится в дереве слоев не скрытого окна, Core Animation ищет CAAction для этого свойства, отправляя сообщение actionForKey: к слою. Если этот поиск возвращает nil, Core Animation создает неявную анимацию для свойства, используя некоторые параметры по умолчанию.

Любой слой с прикрепленной анимацией имеет соответствующий уровень представления. (Прочитайте Деревья слоев отражают различные аспекты состояния анимации для получения дополнительной информации.) Поэтому Core Animation необходимо создать соответствующий слой представления для вашего hitLayer. Это делается с помощью инициализатора init(layer:) в вашем классе CPCoursePointLayer.

В Swift класс не наследует автоматически все конструкторы своего суперкласса, поэтому ваш класс CPCoursePointLayer не имеет этого инициализатора. Итак, ваше приложение вылетает.

Одним из решений является добавление инициализатора init(layer:) в ваш класс CPCoursePointLayer:

init(layer: CALayer) {
    let layer = layer as! CPCoursePointLayer
    // copy any custom properties from layer to self here
    super.init(layer: layer)
}

Если вы определите init(layer:), то вы можете анимировать свойства вашего слоя и позволить им быть неявно анимированный.

Если вы никогда не планируете явно или неявно анимировать свойства вашего слоя, вы можете вместо этого отключить неявную анимацию, возвращая NSNull, когда Core Animation ищет действие, например, добавив этот метод в ваш класс CPCoursePointLayer:

override class func defaultAction(forKey key: String) -> CAAction? {
    return unsafeBitCast(NSNull(), to: CAAction?.self)
}

5
задан harriyott 21 October 2008 в 13:12
поделиться

10 ответов

Это очень много кажется, что Вы захотите захватить копию Visual Studio 2010.

Они реализуют почти точно, что Вы описываете в № 1 - существует скринкаст о новом "Исторический Отладчик" в Системе Команды Visual Studio 2010 на Канале 9.

Существует немного больше об этом в этой записи, расположенной здесь (этот - в течение апреля 2008 CTP кодового названия 'Росарио'),

Я нашел это определение нового Исторического Отладчика из записи в блоге Maor David (здесь):

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

Вот другая видео пошаговая демонстрация также!

Править: Я запуск, оценивая большинство (1) недавнее отбрасывание CTP (31/10 - 08 октября) Visual Studio у 2010 и их, кажется, есть ранняя версия исторического реализованного отладчика. Это могло бы стоить проверить.

(1) [http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&displaylang=en]

10
ответ дан 18 December 2019 в 06:13
поделиться

Я думаю, что Вы пытаетесь добраться до Всезнающего Отладчика или Материальных Историй Программы (с 1999!!).

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

4
ответ дан 18 December 2019 в 06:13
поделиться

Для № 2 можно хотеть читать о контрольных точках, которые доступны в gdb среди других отладчиков.

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

3
ответ дан 18 December 2019 в 06:13
поделиться

Я не знаю ни о каком отладчике, который позволяет Вам сохранить состояние для возвращения к нему позже. Отладчик не имел бы никакого способа знать, какое состояние было релевантно. Самое близкое, которое Вы могли получить, должно будет создать файл дампа в какой-то момент, который позволил бы, Вы осмотреть всю программу заявляете позже.

Visual Studio действительно поддерживает точки прерывания по данным, которые ворвутся в отладчик каждый раз, когда данная ячейка памяти записана также.

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

2
ответ дан 18 December 2019 в 06:13
поделиться

Можно хотеть посмотреть на Отладку Воспроизведения от VMware.

Из ссылки:

То, что мы сделали, интегрировало плагин Visual Studio для Рабочей станции с технологией Записи/Воспроизведения. Можно теперь разработать приложение с Visual Studio, и затем несколькими щелчками мышью запускают его в VM в режиме записи. Можно затем воспроизводить запись так много раз, как Вы хотите, использование всей Visual Studio средств отладки обеспечивает.

Но мы не остановились в этом. Мы также реализовали уникальное "обратное выполнение" опция. Скажите при отладке повреждения памяти можно поместить контрольную точку на поврежденную память и затем поразить "Реверс, Продолжаются" в меню плагина Visual Studio - и мы переместимся по праву записи на место, где память была в последний раз записана в.

2
ответ дан 18 December 2019 в 06:13
поделиться

Для первого выпуска: ddd/gdb имеет след, который показывает Вам точно, как это добирается до той точки. Также coredump мог бы помочь.

Интересная статья о возможные побочные эффекты является этим

1
ответ дан 18 December 2019 в 06:13
поделиться

Для первой точки Вы могли попробовать условные точки останова. Большинство отладчиков, которые я использовал, кажется, имеет эту функцию, хотя много людей не знает об этом. Можно установить точку останова, чтобы только остановиться, когда некоторое условие удовлетворено, как итератор, переменная является некоторым числом, или некоторая другая переменная является пустой. Например:

for (i = 0; i < list.size(); i++) {
  foo = list[i];
}

Вы могли настроить условную точку останова для остановки когда i == 17, или когда foo == null.

1
ответ дан 18 December 2019 в 06:13
поделиться

Такие отладчики в процессе создания. Можно проверить следующий Google Talk - Отладка Назад вовремя

1
ответ дан 18 December 2019 в 06:13
поделиться

Я полагаю, что последняя версия OCaml имеет это. Это походит вполне на новый популярный товар, но IIRC это находится на списке пожеланий будущей версии Visual Studio.

Функция в VS, который я не использовал, может отследить объекты (сделайте идентификатор объекта или что-то).

0
ответ дан 18 December 2019 в 06:13
поделиться

В то время как текущие отладчики не сохраняют состояние, они действительно позволяют Вам возвратиться, до некоторой степени. Можно использовать "точку выполнения перемещения для здесь" функции (подлинное имя будет зависеть от отладчика, конечно) установить выполняемую строку.

Это только действительно работает хорошо на переход вокруг в единственной функции, но это может быть полезно для того, чтобы "попробовать еще раз" с другим значением - Вы повреждаетесь после цикла, используете отладчик, чтобы изменить значения переменных и затем перейти назад к вершине цикла. С другой стороны, если Вы знаете, что вызов функции собирается перестать работать, но Вы хотите видеть то, что происходит впоследствии (например... что-то испытало таймаут, потому что Вы были остановлены в отладчике, но Вы хотите продолжить выполняться, как будто он не испытал таймаут), можно использовать "точку выполнения перемещения для здесь" функции для перескакивания через тот код.

Я знаю, что это не то, что Вы попросили, но в настоящий момент, это - все, что мы имеем... Я полагаю, что такая технология, вероятно, будет доступна довольно скоро, но в настоящий момент я думаю, что это находится в фазе "исследования".

0
ответ дан 18 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: