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);
}
Я бы сказал, что отладка - это искусство, поэтому здесь нет чистой серебряной пули. Есть хорошие стратегии для отладки на любом языке, и они применимы и здесь (например, прочтите эту прекрасную статью ). Например, первое, что нужно сделать, это воспроизвести проблему ... если вы не можете этого сделать, то вам нужно получить дополнительную информацию (например, с помощью регистрации). Как только вы сможете воспроизвести его, вам нужно уменьшить его до источника.
Вместо «уловки» я бы сказал, что у меня есть любимая процедура отладки:
traceback ()
: показывает, где произошла ошибка, что особенно полезно, если у вас есть несколько вложенных функций. параметры (ошибка = восстановление)
; это немедленно переключается в режим браузера, в котором возникает ошибка, так что вы можете просмотреть рабочее пространство оттуда. debug ()
и шаг за шагом сценарий построчно. Лучший новый трюк в R 2.10 (при работе с файлами сценариев) - это использование функций findLineNum ()
и setBreakpoint ()
.
В качестве заключительного комментария: в зависимости от ошибки также очень полезно установить операторы try ()
или tryCatch ()
вокруг вызовов внешних функций (особенно при работе с S4 классы). Иногда это дает даже больше информации, а также дает вам больше контроля над обработкой ошибок во время выполнения.
В этих связанных вопросах есть много предложений:
В выводе nm filename
вам нужно найти что-то, что указывает, использовался ли g77 или gfortran. В большинстве случаев, если библиотека выполняет хотя бы ввод-вывод в одном месте, она будет вызывать libg2c или libgfortran, и вы заметите в нем символ с g77
или gfortran
. Итак, лучше всего использовать grep:
nm filename | grep _g77_
nm filename | grep _gfortran_
Два примечания:
@@ GFORTRAN
в качестве предлагаемого геокара ненадежен: он будет работать только на платформах, где поддерживается управление версиями библиотек, который включает, например, Linux, но не Windows или Mac OS. Лучшее пошаговое руководство, которое я видел до сих пор:
http://www.biostat.jhsph.edu/%7Erpeng/docs/R-debug-tools. pdf
Кто-нибудь согласен / не согласен?