Перейти к содержимому


[Решено] Как отлаживать DLL внутри nanoCAD?


Сообщений в теме: 9

#1 Kreator

    Активист

  • Пользователи
  • PipPipPipPip
  • 687 сообщений
  • Пол:Мужчина
  • Город:Краснодар

Отправлено 03 Октябрь 2014 - 09:47

Здравствуйте!
Решил удариться в MultiCAD.net на C#, раньше писал всё на VBA, потом на LISP'e, но соблазнила возможность создания своих функциональных объектов с интерактивностью. На основе проекта CustomObjects в SDK написал пару строк, работает, рад до опупения :D
Но! Никак не могу разобраться, как отлаживать DLL. В решении есть проект StartCAD, но он на C, ни одна из опробованных мной IDE его не поняла (SharpDevelop, MonoDevelop, MS Visual C# 2010 Express). В SharpDevelop есть в свойствах проекта командная строка, в которой я прописывал NanoCAD, при запуске проекта NCAD запускался, я туда загружал .DLL, команда моя срабатывала, но никакие точки останова не работали. Также пробовал функцию "Attach to process", но тоже безуспешно. MS Visual C# пишет, что нужно создать проект-приложение, из которого вызывать DLL, но мне-то нужно, чтобы NanoCAD вызывал DLL. Вот такая проблема.
Я не сильный программист, и на простых моментах могу затормозить. А в объектной модели MultiCAD'a разбираться без Watch'ей совсем тяжко, документация не слишком подробная, к сожалению. Есть, конечно, ещё вопросы, но, думаю, часть из них я самостоятельно решу, если будет отладка.
Вот, пришёл к вам :) Поможите, пожалуйста, чем сумеете. :rolleyes:
Полховский А.В. Проектирование железнодорожных путей
nanoCAD Plus 10.1.4468.1506; MultiCAD.NET; Печатаем просто и быстро

#2 Kreator

    Активист

  • Пользователи
  • PipPipPipPip
  • 687 сообщений
  • Пол:Мужчина
  • Город:Краснодар

Отправлено 03 Октябрь 2014 - 14:30

О боги! Почему-то сразу на глаза не попалось:

Просмотр сообщенияISL (23 Апрель 2013 - 16:27) писал:

nanoCAD собран на Visual Studio 2008 c .NET Runtime 3.5, при отладке родной версией Visual Studio таких проблем не возникает. Можно разрабатывать и в Visual Studio 2010, но это требует некоторой настройки:
  • В свойствах проекта выбрать Target Framework 3.5
  • Создать рядом с NCad.exe файл ncad.exe.config следующего содержания:
<configuration>
  <startup>
	<supportedRuntime version="v2.0.50727" />
  </startup>
</configuration>

Эта проблема возникает и в AutoCAD-е, см. статью Кина Волмсли Hitting breakpoints in .NET Class Libraries while debugging with Visual Studio 2010.
Спасибо!
Полховский А.В. Проектирование железнодорожных путей
nanoCAD Plus 10.1.4468.1506; MultiCAD.NET; Печатаем просто и быстро

#3 v-oz

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 23 Август 2017 - 14:33

А у меня ни этот, никакой другой вариант, описанный на форуме не работает.
VS2017 в окне модулей (во время отладки) говорит,

Цитата

Состояние символов: Отладчик машинного кода пропустил загрузку символов для управляемого модуля
А в сведениях о загрузке модулей

Цитата

Этот модуль представляет собой предварительно скомпилированный двоичный файл, созданный средством ngen.exe. При загрузке средой выполнения .NET отладчик не пытается загружать символы для этих двоичных файлов, а загружает символы для исходных DLL- и EXE-файлов.
Я право не знаю кто такой ngen и почему именно он генерит мне DLL, а не кто другой. Но хотелось бы узнать как добиться загрузки символов. Наверное это не в этом форуме надо спрашивать, но вдруг.

UPD: NCAD 5.1

UPD2: Ещё флажок в окне модулей нашёл

Цитата

Модуль не загружен по адресу, используемому при загрузке по умолчанию
Что бы это значило?

Сообщение отредактировал v-oz: 23 Август 2017 - 16:18


#4 Kreator

    Активист

  • Пользователи
  • PipPipPipPip
  • 687 сообщений
  • Пол:Мужчина
  • Город:Краснодар

Отправлено 23 Август 2017 - 15:11

Просмотр сообщенияv-oz (23 Август 2017 - 14:33) писал:

А у меня ни этот, никакой другой вариант, описанный на форуме не работает.
Версия NC какая?
Полховский А.В. Проектирование железнодорожных путей
nanoCAD Plus 10.1.4468.1506; MultiCAD.NET; Печатаем просто и быстро

#5 v-oz

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 23 Август 2017 - 15:17

Просмотр сообщенияKreator (23 Август 2017 - 15:11) писал:

Версия NC какая?
а да. . простите.
NCAD 5.1

В оно вывода сыплется всякое от nCad.exe:

Цитата

"nCad.exe" (Win32). Загружено "C:\Users\voz\source\repos\ChipDrawer\ChipDrawer\bin\x86\Debug\ChipDrawer.dll".
"nCad.exe" (Win32). Загружено "C:\Users\voz\source\repos\ChipDrawer\ChipDrawer\bin\x86\Debug\ChipDrawer.dll".
"nCad.exe" (Win32). Выгружено "C:\Users\voz\source\repos\ChipDrawer\ChipDrawer\bin\x86\Debug\ChipDrawer.dll"
"nCad.exe" (Win32). Загружено "C:\Users\voz\source\repos\ChipDrawer\ChipDrawer\bin\x86\Debug\ChipDrawer.dll".
"nCad.exe" (Win32). Загружено "C:\Windows\Microsoft.NET\Framework\v2.0.50727\Culture.dll". Символы загружены.
"nCad.exe" (Win32). Выгружено "C:\Windows\Microsoft.NET\Framework\v2.0.50727\Culture.dll"
Вызвано исключение по адресу 0x7664C41F в nCad.exe: исключение Microsoft C++: EEFileLoadException по адресу памяти 0x00188338.
Вызвано исключение по адресу 0x7664C41F в nCad.exe: исключение Microsoft C++: [rethrow] по адресу памяти 0x00000000.
ET, Thread attach - 3216 (0xC90)
ET, Thread detach - 3216 (0xC90)
Поток 0xc90 завершился с кодом 0 (0x0).

И в окне модулей присутствуют два модуля загруженного приложения. Зачем? Но с одинаковыми признаками относительно символов.
Параметры загрузки символов устанавливались разные - от загрузки всех до загрузки конкретно своего. И, конечно, пробовал загрузить руками символы к своему модулю. Тогда при выборе pdb файла VS ругается, "Соответствующий файл символов не найден в этой папке" - при том, что файлы лежат рядом и сгенерированы одновременно.

Сведения о системе
Скрытый текст

Сообщение отредактировал v-oz: 23 Август 2017 - 16:10


#6 v-oz

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 23 Август 2017 - 16:53

кажется нащупал мою принципиальную ошибку. Но пока не понял.

Цитата

Проект создается точно также как и для предыдущего примера:
  • Project type: Visual C#
  • Template: Class Library

При этом для модуля, скомпилированного из статьи, символы таки загружаются в отладчик!
Однако если с нуля создавать в VS2017 библиотеку классов (.NET FW), то её при запуске отладки нельзя назначить запускаемым проектом - ругается.
Но если взять пример из статьи, то, оказывается, что можно. Или тогда это была не библиотека классов .NET Framework? Тогда что же? просто библиотека? Но её же тоже запускает nCad - внешний процесс.

Я понимаю, что мой уровень знаний в этой сфере довольно низок и прошу снисходительно отнестись ко всем стенаниям :) На сегодня осталось лишь одно сообщение по ограничениям форума :)

#7 Kreator

    Активист

  • Пользователи
  • PipPipPipPip
  • 687 сообщений
  • Пол:Мужчина
  • Город:Краснодар

Отправлено 23 Август 2017 - 17:01

Я подозреваю, что у Вас не указан процесс, который нужно запускать для "запускаемого проекта". Сделать надо библиотеку DLL, да. Но в параметрах отладки нужно прописать exe-шник NC. При этом до запуска NC нужно настроить автоматиескую подгрузку отлаживаемой библиотеки DLL. Это можно сделать в меню автозагрузки APPLOAD, либо через nApp.ini в папке с программой NC
[\NetModules]
Z:\Objects.dll
или через C:\ProgramData\Nanosoft\nanoCAD xx\DataRW\load.config
<root>
    <list>
	    <module path="D:\Objects.dll"/>
    </list>
</root>
Это всё относительно NC6, не уверен, что всё справедливо для NC5. Но проект необходимо запускать из VS, среда запустит указанный в настройках проекта exe-шник и начнёт отладку, если библиотека подгружается в NC.
Полховский А.В. Проектирование железнодорожных путей
nanoCAD Plus 10.1.4468.1506; MultiCAD.NET; Печатаем просто и быстро

#8 Kreator

    Активист

  • Пользователи
  • PipPipPipPip
  • 687 сообщений
  • Пол:Мужчина
  • Город:Краснодар

Отправлено 23 Август 2017 - 17:16

В SharpDevelop эта настройка находится в разделе настроек проекта Debug:
Прикрепленный файл  Снимок экрана20170823171449.png   12,46К   0 Количество загрузок:
Полховский А.В. Проектирование железнодорожных путей
nanoCAD Plus 10.1.4468.1506; MultiCAD.NET; Печатаем просто и быстро

#9 v-oz

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 23 Август 2017 - 17:19

Просмотр сообщенияKreator (23 Август 2017 - 17:01) писал:

Я подозреваю, что у Вас не указан процесс, который нужно запускать для "запускаемого проекта".
Спасибо за участие. Битие головой о стену дало результат - штукатурка осыпалась и под ней показался вход в пещеру отладки :)

Я делал несколько иначе. Так сказать, цивильно, кнопочками и без конфигов. Что-то они у меня ни разу не работают. Ни один.
Автозагрузку приложения делаю один раз, но через меню NC5.1 - Сервис/Приложения/Загрузка приложений и там автозагрузка. Так работает.

Я понимаю, что для DLL нужен внешний процесс и к нему можно цепляться руками, что надоедает, тем более, что NC нужно гасить каждый раз для перезагрузки DLL.
В статье по ссылке из цитаты второго поста в ветке есть третий способ - добавление в решение бинарника nCad, как проекта и в свойствах ему нужно указать тип отладчика версии 2.0. я это заметил, но думаю себе, пусть "авто" будет и забыл. АВТО, Карл!
И оказывается, что напрасно! Нужно установить этот несчастный параметр в "Управляемый код (версии 3.5, 3.0, 2.0)" и всё заработает!


Таки решено. Спасибо!

#10 Kreator

    Активист

  • Пользователи
  • PipPipPipPip
  • 687 сообщений
  • Пол:Мужчина
  • Город:Краснодар

Отправлено 23 Август 2017 - 17:28

Добро пожаловать :) По тонкостям программирования лучше писать на форуме Клуба разработчиков, там обычно предметно отвечают на все вопросы с подковыркой :)
Полховский А.В. Проектирование железнодорожных путей
nanoCAD Plus 10.1.4468.1506; MultiCAD.NET; Печатаем просто и быстро





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей