В чем разница между пакетами python [x.x] и python [x.x] -dev? [Дубликат]

В то время как , что вызывает NullReferenceExceptions и подходит к avoid / fix , такое исключение было рассмотрено в других ответах, что многие программисты не имеют " t узнал еще, как независимо отлаживать такие исключения во время разработки.

В Visual Studio это обычно легко благодаря Visual Studio Debugger .


Во-первых, убедитесь, что правильная ошибка будет обнаружена - см. . Как разрешить нарушение «Исключение System.NullReferenceException» в VS2010? Примечание1

Затем либо Начать с отладки (F5) , либо Приложить [отладчик VS] к запуску процесса . Иногда может быть полезно использовать Debugger.Break , в котором будет предложено запустить отладчик.

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

Например, в следующей строке единственный код, который может , вызывает исключение, если myString имеет значение null. Это можно проверить, посмотрев окно Watch или выполнив выражения в окне Immediate Window .

var x = myString.Trim();

В более сложных случаях, таких как следуя ниже, вам нужно будет использовать один из методов выше (Watch или Immediate Windows) для проверки выражений, чтобы определить, было ли str1 пустым или если str2 имеет значение null.

var x = str1.Trim() + str2.Trim();

Once , где было выбрано исключение, это обычно тривиально по отношению к разуму назад, чтобы выяснить, где введенное значение null было [неправильно] -

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


1 Если Break on Throws слишком агрессивен и отладчик останавливается на NPE в библиотеке .NET или сторонних разработчиков, Break на User-Unhandled можно использовать для ограничения выловленных исключений. Кроме того, VS2012 представляет Just My Code , который я рекомендую также включить.

Если вы отлаживаете с включенным Just My Code, поведение немного отличается. При включенном Just My Code отладчик игнорирует исключения, связанные с привилегиями обычного языка (CLR) первого шанса, которые выходят за пределы My Code и не проходят через My Code

26
задан Pascal Cuoq 2 March 2010 в 05:29
поделиться

2 ответа

Пакеты *-devel (обычно называемые *-dev в дистрибутивах на основе Debian) обычно являются файлами, необходимыми для компиляции кода с данной библиотекой.

Для запуска приложения с использованием библиотеки libfoo необходимы только фактический файл общей библиотеки (*.so.*, например libfoo.so.1.0) (плюс, возможно, некоторые файлы данных и некоторые символические ссылки на конкретные версии).

Когда вы действительно хотите скомпилировать приложение C который использует эту библиотеку, вам понадобятся файлы заголовков (*.h, например foo.h), которые описывают интерфейс этого приложения, а также символическую ссылку без ссылки на общую библиотеку (*.so, например libfoo.so ] -> libfoo.so.1.0). Обычно они добавляются в пакеты *-devel.

Иногда пакеты *-devel также включают статически скомпилированные версии библиотек (*.a, например libfoo.a), если вы хотите создать полное автономное приложение, которое вообще не зависит от динамических библиотек.

Другие языки (такие как Java, Python, ...) используют другой способ уведомления API библиотеки (в том числе всю необходимую информацию в реальной библиотеке), и поэтому обычно не требуется никаких отдельных пакетов *-devel (кроме, возможно, для документации и дополнительных инструментов).

43
ответ дан Joachim Sauer 24 August 2018 в 01:12
поделиться
  • 1
    Почти. файл .so находится в пакете -devel; обычная общая библиотека идет через .so.*, так как она включает SONAME. Файл .so используется компоновщиком, а библиотека .so.* используется во время выполнения. – Ignacio Vazquez-Abrams 2 March 2010 в 05:48
  • 2
    Спасибо, я включил эту поправку в текст. – Joachim Sauer 2 March 2010 в 08:03
  • 3
    так что в основном вам нужны * devel libs приложения, о котором идет речь, если это зависимость другого приложения, потому что вам нужно разоблачить интерфейс? – ohhh 31 July 2018 в 09:54

Они обычно содержат необходимые заголовки и библиотеки. Например, python-devel предоставит вам заголовки и библиотеки Python, если вы хотите встроить интерпретатор Python в свое приложение. Некоторые дополнительные инструменты и документация также включены (например, руководство разработчика или примеры кода).

6
ответ дан AndiDog 24 August 2018 в 01:12
поделиться
Другие вопросы по тегам:

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