Как войти в исходный код Framework в MonoDevelop
При отладке проекта в MonoDevelop, как я могу войти в исходный код Mono Framework?
Я использую ванильный MonoDevelop из openSUSE 11.3.
4 ответа
Это старый пост, но я наткнулся на него, ища ответ сегодня, так что, надеюсь, он поможет кому-то еще. Простое снятие флажка "Не входить в код фреймворка" не сработает, если у вас нет источника в том месте, на которое указывают файлы PDB/MDB. На моей коробке он искал источник по адресу "/usr/src/packages/BUILD/mono-2.10".
Чтобы выяснить, куда именно это должно пойти, сгенерируйте и выйдите из системы исключение, которое содержит трассировку стека, включающую структуру (например, новый SqlConnection(null)), и он покажет вам местоположение файла, в котором он ищет источник в. Например:
at System.Net.Sockets.NetworkStream.Read (System.Byte[] buffer, Int32 offset, Int32 size) [0x00065] in /usr/src/packages/BUILD/mono-2.10/mcs/class/System/System.Net.Sockets/NetworkStream.cs:369
at Mono.Data.Tds.Protocol.TdsComm.Read (System.Byte[] buffer, Int32 offset, Int32 count) [0x00000] in /usr/src/packages/BUILD/mono-2.10/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/TdsComm.cs:630
--- End of inner exception stack trace ---
Ключевая часть ответа, если вы просто настраиваете среду Mono, - это где устанавливать исходные файлы. Для стандартной сборки Mono на Ubuntu Natty это /build/buildd. Итак, чтобы получить источник моно 2.6.7 (сборка Ubuntu), выполните:
sudo mkdir /build
cd /build
sudo mkdir buildd
cd buildd
sudo apt-get source mono
sudo apt-get install mono-dbg
Затем убедитесь, что у вас нет опции "Не входить в код фреймворка" в monodevelop, и он должен быть в состоянии найти источники.
Во-первых, ваши библиотеки классов Mono должны иметь отладочные символы, указывающие на исходные файлы платформы. Затем вы должны снять флажок "Не входить в код фреймворка" в параметрах отладчика MD.
У меня нет apt-get source
опция в Arch Linux, поэтому я сделал это как root:
# git clone https://github.com/mono/mono.git /opt/mono-src
# mkdir -p /build/mono/src
# ln -s /opt/mono-src /build/mono/src/mono-4.6.1
Вместо этих путей / билдов используйте свой собственный в соответствии с ответом Грега.