Как отладить сторожевой тайм-аут

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

@ViewChild("notificationBar") private notificationBarRef: ElementRef;

private _notificationBarHeight: number = null;

public get notificationBarHeight(): number {
  const height = this.notificationBarRef ? this.notificationBarRef.nativeElement.offsetHeight : null;
  if (Math.abs(height - this._notificationBarHeight) > 0.1) {
    this._notificationBarHeight = height;
    this.changeDetectorRef.detectChanges();
  }
  return this._notificationBarHeight;
}

В шаблоне установите высоту элемента div в пикселях с привязкой [style.height.px]:

См. этот стек-блиц для демонстрации.

11
задан Robert 20 March 2009 в 12:37
поделиться

6 ответов

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

Поместите точку останова в начале основного.

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

9
ответ дан 3 December 2019 в 05:59
поделиться

Я использую основанное на состоянии программирование и прием, который я всегда хотел использовать, должен был зарезервировать один выходной порт для текущего состояния в двоичном файле. Затем поднимите трубку анализатор логики и посмотрите синхронизации изменений состояния. Вы могли сделать что-то подобное здесь: Сделайте то, что сказал Robert, и создайте глобальную переменную и измените ее значение в ключевых пунктах - предпочтительно с функцией, которая сразу устанавливает значение порта к текущему состоянию (т.е. changeState (nextState);) Изменение состояние при вводе функции, которая ударяет собаку, затем возвратите ее к предыдущему состоянию перед отъездом функции. Необходимо смочь видеть, от каких функций это не становится ударенным и затем можно работать над теми.

Удача, это походит на проблему синхронизации, и это жестко решить.

2
ответ дан 3 December 2019 в 05:59
поделиться

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

Было бы действительно полезно разгрузить контекст выполнения (локальный стек, планируя состояние и т.д.) для каждой задачи/потока незадолго до сброса процессора. С небольшим количеством удачи и работы, Вы сможете определить то, что препятствует сторожевой задаче ударить таймер.

2
ответ дан 3 December 2019 в 05:59
поделиться

Подвергните сомнению каждое предположение, которое Вы делаете, дважды:

  • Удостоверьтесь, что сторожевой таймер ударяют (я не знаю регистрирующиеся средства на процессоре).
  • Удостоверьтесь сторожевой таймер при ударе не сбрасывает процессор.

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

0
ответ дан 3 December 2019 в 05:59
поделиться

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

Тем не менее вот некоторые основы:

Действительно ли это - многопоточные приложения? Вы используете планировщик RT? Если так, Ваша сторожевая задача исчерпана ресурсы?

Удостоверьтесь, что Ваша сторожевая задача не может застрять ни на чем (незаконченный семафор, ожидающий сообщения, и т.д.). Иногда, функции могут заблокироваться способами, которыми Вы не могли бы ожидать; например, у меня есть платформа Linux, я продолжаю работать прямо сейчас, где я могу заставить printf блокироваться довольно легко.

Если это является единственным, распараллелил, профилировщик может помочь Вам определить проблемы синхронизации.

Если это - новая система, удостоверьтесь, что сторожевой таймер работает правильно; протестируйте простой код, который просто поражает WD и затем спит в бесконечном цикле.

4
ответ дан 3 December 2019 в 05:59
поделиться

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

2
ответ дан 3 December 2019 в 05:59
поделиться
Другие вопросы по тегам:

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