запуск сценария остановка посередине - PullRequest
2 голосов
/ 26 января 2010

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

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

Мне просто интересно, как я могу определить, на какой линии он останавливается?

в чем может быть причина проблемы и как я могу запустить весь скрипт от начала до конца?

Спасибо!


UPDATE:

Я использую dbstop

dbstop if error  
dbstop if warning  
run path2script

Бег по-прежнему застревает где-то, и не сообщается о причине.

Ответы [ 7 ]

1 голос
/ 27 сентября 2013

Вот один из способов узнать, что происходит:

  1. Включите dbstop if error
  2. Как только ваш код действительно застрянет, нажмите CTRL + C, это позволит вам проверить ситуацию и посмотреть, что происходит

  3. Если поиск не достаточен: выберите строку, в которой была вызвана ошибка, и нажмите f9.

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

Sidenote: Если вы не уверены, что находитесь в цикле, в последних версиях Matlab есть кнопка автоформатирования, используйте ее!

0 голосов
/ 31 марта 2011

Я хотел бы добавить, что при прерывании (ctrl + c) скрипт выдаст ошибку, указывающую, на какой строке он находился во время прерывания.

0 голосов
/ 04 марта 2011

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

0 голосов
/ 15 февраля 2010

Как говорит groovingandi, установите условную точку останова в вашем коде в начале итерации, где цикл for обычно застревает. Вы можете сделать это с помощью команды вроде:

dbstop in runscript at 500 if iLoop==365 
% where 500 is the first line within the for loop,
% and 365 is the iteration causing problems

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

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

0 голосов
/ 27 января 2010

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

0 голосов
/ 26 января 2010

Что именно происходит, когда ваш скрипт застревает? Выходит ли он обратно в подсказку или просто зависает matlab? Если это последнее, то, похоже, в вашем коде бесконечный цикл ...

0 голосов
/ 26 января 2010

Что это за сценарий?

Недостаточно памяти? Если вы превышаете максимальный размер выделенной кучи, он может произойти сбой. Когда вы перезапускаете его, он запускается со всей памятью, которая у него была изначально, и может завершиться до того, как снова сможет использовать всю свою память.

Я бы порекомендовал проверить на утечки памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...