На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

gisu64vcacces.dll access violation

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 3 4 5 ... 9 След.
RSS
[ Закрыто ] gisu64vcacces.dll access violation, Application Verifier выдает access violation при загрузке gisu64vcacces.dll
 
Добрый день, используем в нашем приложении Gis Toolkit Free 12.
Приложение временами работает некорректно или падает, после мониторинга кода и работы в отладчике появилось подозрение, что кто-то "ездит" по памяти.
Было решено установить Microsoft Application Verifier и провести тестирование нашего ПО с помощью данного инструмента.

При загрузке gisu64vcacces.dll через LoadLibrary, Application Verifier генерирует исключение и выдает следующую информацию в Output Visual Studio:
Код
Exception thrown at 0x000000000D07BE6C (gisu64vcacces.dll) in stgismap-viewer.exe: 0xC0000005: Access violation writing location 0x0000000000000228.


=======================================
VERIFIER STOP 0000000000000013: pid 0x1D00: First chance access violation for current stack trace. 

   0000000000000228 : Invalid address causing the exception.
   000000000D07BE6C : Code address executing the invalid access.
   00000000002AEAB0 : Exception record.
   00000000002AE5C0 : Context record.


=======================================
This verifier stop is continuable.
After debugging it use `go' to continue.

=======================================

stgismap-viewer.exe has triggered a breakpoint.

Просьба запуститься под Application Verifier и проверить gisu64vcacces.dll на наличие Access violation writing location
Изменено: Александр Волков - 10.11.2017 13:00:01
 
Подскажите каким средством разработки Вы собираете приложение с использованием GIS ToolKit 12?
 
Цитата
Oleg Belenkov написал:
Подскажите каким средством разработки Вы собираете приложение с использованием GIS ToolKit 12?
Microsoft Visual Studio 2015 v 14.0.25431.01 Update 3
Приаттачил скриншоты
callstack0.png (66.15 КБ)
callstack1.png (50.39 КБ)
exception.png (124.08 КБ)
 
Попробуем Microsoft Application Verifier. Но результат может быть не однозначный. Может ошибка в приложении при использовании Microsoft Application Verifier проявляется потому, что gisu64vcacces.dll собирается не в VisualStudio, а в Embarcadero.
 
Цитата
Andrey Gheleznyakov написал:
Попробуем Microsoft Application Verifier. Но результат может быть не однозначный. Может ошибка в приложении при использовании Microsoft Application Verifier проявляется потому, что gisu64vcacces.dll собирается на в VisualStudio, а в Embarcadero.
Хорошо, жду ваших тестов. Но у нас явные признаки того, что кто-то ездит по памяти, может быть gisu64vcacces.dll не причем, но все же хотелось бы удостовериться.
 
Цитата
Александр Волков написал:
Хорошо, жду ваших тестов. Но у нас явные признаки того, что кто-то ездит по памяти, может быть gisu64vcacces.dll не причем, но все же хотелось бы удостовериться.

Применять Microsoft Application Verifier для проверки утечек в приложении, использующем библиотеки GTK, скорее всего не получиться.
Проблема в том, что Microsoft Application Verifier, судя по всему, не умеет работать с библиотеками стандарта OMF и ожидает логику работы по стандарту COFF.
Библиотеки ядра GIS ToolKit являются библиотеками стандарта OMF.
VS работает со своим стандартом от Micrsoft - COFF.
Отличие как раз в работе с памятью (в частности - адресация параметров функций, и главное - варианты освобождения стека).
Однако, при динамической загрузке (через LoadLibrary) проблемы отличия стандартов решает сама операционная система. То есть, если в проект на VS подключать DLL не родного для него стандарта OMF, то при подключении через LoadLibrary никаких проблем с памятью быть не может.
Чтобы использовать статическую линковку OMF библиотек в проекты VS необходимы определенные "танцы с бубном" для получения *.LIB для линковки.
Если все правильно сделано, то и в этом случае утечек памяти тоже не будет.

Теперь к вопросу по использованию Microsoft Application Verifier.
Возможно, у него есть какие-то дополнительные параметры, позволяющие учесть ситуацию с библиотеками OMF, но мы об этом не знаем.
По факту Microsoft Application Verifier рассматривает подключение библиотеки не COFF стандарта и ее выгрузку уже как ошибку.

Я сделал абсолютно пустую библиотеку OMF (не содержащую ни одного вызова, ни одной переменной, - ничего).
При LoadLibrary этой библиотеки в тестовый проект на VC++:
Код
int main()
{
   //HMODULE hm = ::LoadLibraryW(L"gisu64vcacces.dll");
   HMODULE hm = ::LoadLibraryW(L"testdll.dll");
   if (!hm)
      std::cerr << "LoadLibrary error!" << std::endl;
   else
      std::cout << "LoadLibrary - OK!" << std::endl;

   std::cout << "Press Enter..." << std::endl;
   std::cin.get();

   if (hm)
      FreeLibrary(hm);
    return 0;
}

имеем такие же ругательства со стороны Microsoft Application Verifier:

Скрытый текст



Поэтому проблема, якобы обнаруженная Microsoft Application Verifier, не является проблемой.
И, к сожалению, Microsoft Application Verifier использовать для проверки не получится.

Для дальнейшего изучения проблемы просьба уточнить, какие именно функции Вами используются в процессах, приводящих к потенциальным утечкам.
Также проверьте свой код на с помощью анализатора VS на предмет потенциально неблагонадежных мест.

Пока грешить на утечки внутри gisu64vcacces.dll считаю преждевременным.

PS
Используете ли Вы визуальные диалоги из состава GTK?
Если Вы укажете, какие задачи Вы хотите решить с помощью GTK, мы, возможно, посоветуем какое-то решение на базе альтернативных сборок ГИС-ядра.
 
Александр Волков, просьба проверить следующий вариант
1. в папку с проектом, к загружаемой Вами библиотеке gisu64acces.dll подкиньте DLL gisu64grd.dll
2. попробуйте запустить Ваш проект и загрузить gisu64acces.dll
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Цитата
Денис Вицко написал:
00000000058EAFC0 : Address of  ....
"ConsoleApplication1.exe" (Win32). Выгружено "C:\GISDLL\testdll.dll"
Денис, а по другому разве может быть? (см выделенный текст)
п.с. адреса ну явно не Win32  :|  
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Цитата
KFF написал:
Денис, а по другому разве может быть? (см выделенный текст)
п.с. адреса ну явно не Win32    

Я не в курсе, почему Application Verifier так пишет. Проект х64, библиотека х64.
Не пройдет LoadLibrary на библиотеку, если ее разрядность не соответствует исполняемому файлу.

 
Проблема с загрузкой библиотеки может быть, если в папке с приложением не хватает системных библиотек.
В комплекте с библиотеками "vc" должны быть библиотеки borlndmm.dll и cc64140mt.dll.

Теоретически ошибка может возникать, если в папке с приложением нет необходимых библиотек runtime из состава VC++.
Посмотрите dump Вашего exe для определения необходимых для выполнения dll (кроме системных, конечно).


Для освобождения ресурсов библиотеки перед выгрузкой желательно вызывать функцию -
Код
 // Освободить ресурсы ядра перед закрытием приложения

_MAPIMP  long int _MAPAPI mapCloseMapAccess();
Страницы: 1 2 3 4 5 ... 9 След.
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности