Перейти к содержанию

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


Рекомендуемые сообщения

Здравствуйте!

Решил удариться в 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 собран на Visual Studio 2008 c .NET Runtime 3.5, при отладке родной версией Visual Studio таких проблем не возникает. Можно разрабатывать и в Visual Studio 2010, но это требует некоторой настройки:

  1. В свойствах проекта выбрать Target Framework 3.5
  2. Создать рядом с 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.

Спасибо!

Ссылка на сообщение
Поделиться на другие сайты
  • 2 года спустя...

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

VS2017 в окне модулей (во время отладки) говорит,

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

А в сведениях о загрузке модулей

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

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

 

UPD: NCAD 5.1

 

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

Модуль не загружен по адресу, используемому при загрузке по умолчанию

Что бы это значило?

Изменено пользователем v-oz
Ссылка на сообщение
Поделиться на другие сайты

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

Версия NC какая?

Ссылка на сообщение
Поделиться на другие сайты

Версия 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 ругается, "Соответствующий файл символов не найден в этой папке" - при том, что файлы лежат рядом и сгенерированы одновременно.

 

Сведения о системе

 

Microsoft Visual Studio Community 2017

Версия 15.3.0

VisualStudio.15.Release/15.3.0+26730.3

Microsoft .NET Framework

Версия 4.7.02053

Установленная версия: Community

Visual Basic 2017 00369-60000-00001-AA805

Microsoft Visual Basic 2017

Visual C# 2017 00369-60000-00001-AA805

Microsoft Visual C# 2017

Visual C++ 2017 00369-60000-00001-AA805

Microsoft Visual C++ 2017

ASP.NET and Web Tools 2017 15.0.30726.0

ASP.NET and Web Tools 2017

ASP.NET Core Razor Language Services 1.0

Provides languages services for ASP.NET Core Razor.

JavaScript Project System 2.0

JavaScript Project System

Microsoft JVM Debugger 1.0

Provides support for connecting the Visual Studio debugger to JDWP compatible Java Virtual Machines

Microsoft MI-Based Debugger 1.0

Provides support for connecting Visual Studio to MI compatible debuggers

TypeScript 2.3.4.0

Средства TypeScript для Visual Studio

Visual Studio Code Debug Adapter Host Package 1.0

Interop layer for hosting Visual Studio Code debug adapters in Visual Studio

Диспетчер пакетов NuGet 4.3.0

Инструменты Visual Studio для CMake 1.0

Инструменты Visual Studio для CMake

Мастера Microsoft Visual C++ 1.0

Мастера Microsoft Visual C++

Модуль шаблонов ASP.NET 2017 15.0.30726.0

Модуль шаблонов ASP.NET 2017

Набор средств Visual Studio Tools для универсальных приложений для Windows 15.0.26730.00

Набор средств Visual Studio Tools для универсальных приложений для Windows позволяет создавать универсальные приложения, взаимодействие с которыми не будет различаться при работе на любых устройствах с ОС Windows 10: телефонах, планшетах, ПК и других. Набор средств включает пакет Microsoft Windows 10 SDK.

Общие инструменты Windows Azure 1.10

Предоставляет общие службы для использования мобильными службами и инструментами Microsoft Azure.

Пакет VC Microsoft Visual Studio 1.0

Пакет VC Microsoft Visual Studio

Пакет средств Application Insights для Visual Studio 8.8.00712.1

Средства Application Insights для Visual Studio

Разработка на Visual C++ для Linux 1.0.7

Разработка на Visual C++ для Linux

Система проектов JavaScript UWP 2.0

Система проектов JavaScript UWP

Языковая служба JavaScript 2.0

Языковая служба JavaScript

 

 

Изменено пользователем v-oz
Ссылка на сообщение
Поделиться на другие сайты

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

 

Проект создается точно также как и для предыдущего примера:

  • Project type: Visual C#
  • Template: Class Library

 

При этом для модуля, скомпилированного из статьи, символы таки загружаются в отладчик!

Однако если с нуля создавать в VS2017 библиотеку классов (.NET FW), то её при запуске отладки нельзя назначить запускаемым проектом - ругается.

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

Я подозреваю, что у Вас не указан процесс, который нужно запускать для "запускаемого проекта". Сделать надо библиотеку 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.

Ссылка на сообщение
Поделиться на другие сайты

В SharpDevelop эта настройка находится в разделе настроек проекта Debug:

Снимок экрана20170823171449.png

Ссылка на сообщение
Поделиться на другие сайты

Я подозреваю, что у Вас не указан процесс, который нужно запускать для "запускаемого проекта".

Спасибо за участие. Битие головой о стену дало результат - штукатурка осыпалась и под ней показался вход в пещеру отладки :)

 

Я делал несколько иначе. Так сказать, цивильно, кнопочками и без конфигов. Что-то они у меня ни разу не работают. Ни один.

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

 

Я понимаю, что для DLL нужен внешний процесс и к нему можно цепляться руками, что надоедает, тем более, что NC нужно гасить каждый раз для перезагрузки DLL.

В статье по ссылке из цитаты второго поста в ветке есть третий способ - добавление в решение бинарника nCad, как проекта и в свойствах ему нужно указать тип отладчика версии 2.0. я это заметил, но думаю себе, пусть "авто" будет и забыл. АВТО, Карл!

И оказывается, что напрасно! Нужно установить этот несчастный параметр в "Управляемый код (версии 3.5, 3.0, 2.0)" и всё заработает!

 

 

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

Ссылка на сообщение
Поделиться на другие сайты

Добро пожаловать :) По тонкостям программирования лучше писать на форуме Клуба разработчиков, там обычно предметно отвечают на все вопросы с подковыркой :)

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Расскажите друзьям

    Нравится Официальный форум компании Нанософт? Расскажите друзьям!
×
×
  • Создать...