Общие предложения по отладке в R

NetworkInterface.GetIsNetworkAvailable очень ненадежна. Просто имейте VMware или другое подключение к локальной сети, и оно вернет неправильный результат. Также о методе Dns.GetHostEntry меня просто беспокоило, может ли тестовый URL-адрес быть заблокирован в среде, где мое приложение будет развертываться.

Так что другой способ, который я обнаружил, - использовать метод InternetGetConnectedState. Мой код

[System.Runtime.InteropServices.DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);

public static bool CheckNet()
{
     int desc;
     return InternetGetConnectedState(out desc, 0);         
}
119
задан David LeBauer 25 December 2015 в 08:05
поделиться

3 ответа

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

Вместо «уловки» я бы сказал, что у меня есть любимая процедура отладки:

  1. Когда возникает ошибка, первое, что я обычно делаю, это просматриваю трассировку стека, вызывая traceback () : показывает, где произошла ошибка, что особенно полезно, если у вас есть несколько вложенных функций.
  2. Затем я установлю параметры (ошибка = восстановление) ; это немедленно переключается в режим браузера, в котором возникает ошибка, так что вы можете просмотреть рабочее пространство оттуда.
  3. Если у меня все еще недостаточно информации, я обычно использую функцию debug () и шаг за шагом сценарий построчно.

Лучший новый трюк в R 2.10 (при работе с файлами сценариев) - это использование функций findLineNum () и setBreakpoint () .

В качестве заключительного комментария: в зависимости от ошибки также очень полезно установить операторы try () или tryCatch () вокруг вызовов внешних функций (особенно при работе с S4 классы). Иногда это дает даже больше информации, а также дает вам больше контроля над обработкой ошибок во время выполнения.

В этих связанных вопросах есть много предложений:

166
ответ дан 24 November 2019 в 01:45
поделиться

В выводе nm filename вам нужно найти что-то, что указывает, использовался ли g77 или gfortran. В большинстве случаев, если библиотека выполняет хотя бы ввод-вывод в одном месте, она будет вызывать libg2c или libgfortran, и вы заметите в нем символ с g77 или gfortran . Итак, лучше всего использовать grep:

nm filename | grep _g77_
nm filename | grep _gfortran_

Два примечания:

  1. Grepping для @@ GFORTRAN в качестве предлагаемого геокара ненадежен: он будет работать только на платформах, где поддерживается управление версиями библиотек, который включает, например, Linux, но не Windows или Mac OS.
  2. По-прежнему возможно, что некоторый скомпилированный код не вызывает абсолютно никакой функции библиотеки поддержки (если все, что он делает, является простой арифметикой и не имеет ввода-вывода, например). В этом случае, если он не скомпилирован с параметрами отладки, он
13
ответ дан 24 November 2019 в 01:45
поделиться

Лучшее пошаговое руководство, которое я видел до сих пор:

http://www.biostat.jhsph.edu/%7Erpeng/docs/R-debug-tools. pdf

Кто-нибудь согласен / не согласен?

38
ответ дан 24 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

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