Как найти, какие динамические объекты занимают слишком много времени, чтобы закончить? - PullRequest
1 голос
/ 20 августа 2011

М 8.0.1, окна 7.

Вопрос отладки.

Иногда, когда я запускаю M и открываю свой ноутбук (в нем включена динамика, прежде чем я его закрыл), я получаю это сообщение

enter image description here

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

Мне нужно завершить сам процесс (т.е. Mathematica) из диспетчера задач Windows, чтобы выйти из этого.

Ясно, что в моем коде где-то есть ошибка в динамике.

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

спасибо

Ответы [ 2 ]

6 голосов
/ 21 августа 2011

Вам может повезти, оценив:

SetOptions[$FrontEnd, PrintKernelDynamicTraffic -> True]

Это заставит FrontEnd Mathematica печатать сообщения на системной консоли (на Mac я не знаю, где онидет в Windows) всякий раз, когда он отправляет динамические оценки ядру.Если вы можете найти последнюю динамическую оценку, которая будет распечатана при появлении сообщения, это должна быть та, которая требует много времени для оценки.

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

4 голосов
/ 20 августа 2011

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

В общем, я настоятельно рекомендую попробовать, не только для динамической функциональности.

...