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

Нестабильность и ошибочные данные от mapGetMapNameUn

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: Пред. 1 2
RSS
Нестабильность и ошибочные данные от mapGetMapNameUn
 
Цитата
Vladimir Letov написал:
Пришлите образец карты к нам на почту  panorama@gisinfo.ru  с указанием ссылки на тему форума.

Выслал, спасибо за внимание к вопросу.
 
Запустил на нашей плате, под которую у нас есть собранные библиотеки, и получил SIGSEGV

Код
Temporary breakpoint 1, main (argc=1, argv=0x7efff394) at main.cpp:81
81    {
(gdb) next
82        QCoreApplication a(argc, argv);
(gdb) next
83        panorama::IPanoramaFeature* test = nullptr;
(gdb) next
84        for (const auto& f: files){
(gdb) next
85            test = new tests::MapGetNameUn(f);
(gdb) next
86            bool status = test->run();
(gdb) step
tests::MapGetNameUn::run (this=0x43f60) at mapgetnameun.cpp:26
26    {
(gdb) next
27        if (!m_file.exists()){
(gdb) next
31        if (!gis::common::FileIsSupported(m_file, {FileType::Map,FileType::Mtw,
(gdb) next
39                    m_file.absoluteFilePath());
(gdb) next
40        HMAP hmap = mapOpenData(koi8r.constData(), GENERIC_READ);
(gdb) next
41        if (hmap == 0){
(gdb) next
46        QString koi8rMapName = gis::common::parseStringFromKOI8_R(mapGetMapName(hmap));
(gdb) next
47        WCHAR buf[1024] = {};
(gdb) print hmap
$1 = 6265020424
(gdb) print koi8rMapName.toStdString().c_str()
$2 = 0x440e8 "ПОДОЛЬСК"
(gdb) next
48        long rc = mapGetMapNameUn(hmap, &(buf[0]), sizeof(buf));
(gdb) next

Program received signal SIGSEGV, Segmentation fault.
0x767b6328 in mapGetMapNameUn () from /usr/local/lib/gisdesigner/libqdmapacces.so
(gdb) 
 
Цитата
Владимир Егоров написал:
Запустил на нашей плате, под которую у нас есть собранные библиотеки, и получил SIGSEGV

А это кстати идея, запустил под "valgrind", он показал:

Код
==14712== 1 errors in context 1 of 4:
==14712== Conditional jump or move depends on uninitialised value(s)
==14712==    at 0x50A4F11: TMapStorage::MainName() (in libqdmapacces.so)
==14712==    by 0x4FD7E46: TMap::MainName() (in libqdmapacces.so)
==14712==    by 0x4FB8028: mapGetMapNameUn (in libqdmapacces.so)
==14712==    by 0x10AD50: main (test.cpp:44)


Может отсюда нестабильность и падения?
 
Цитата
Владимир Егоров написал:
Запустил на нашей плате, под которую у нас есть собранные библиотеки, и получил SIGSEGV
Код
 Temporary breakpoint 1, main (argc=1, argv=0x7efff394) at main.cpp:81
81    {
(gdb) next
82        QCoreApplication a(argc, argv);
(gdb) next
83        panorama::IPanoramaFeature* test = nullptr;
(gdb) next
84        for (const auto& f: files){
(gdb) next
85            test = new tests::MapGetNameUn(f);
(gdb) next
86            bool status = test->run();
(gdb) step
tests::MapGetNameUn::run (this=0x43f60) at mapgetnameun.cpp:26
26    {
(gdb) next
27        if (!m_file.exists()){
(gdb) next
31        if (!gis::common::FileIsSupported(m_file, {FileType::Map,FileType::Mtw,
(gdb) next
39                    m_file.absoluteFilePath());
(gdb) next
40        HMAP hmap = mapOpenData(koi8r.constData(), GENERIC_READ);
(gdb) next
41        if (hmap == 0){
(gdb) next
46        QString koi8rMapName = gis::common::parseStringFromKOI8_R(mapGetMapName(hmap));
(gdb) next
47        WCHAR buf[1024] = {};
(gdb) print hmap
$1 = 6265020424
(gdb) print koi8rMapName.toStdString().c_str()
$2 = 0x440e8 "ПОДОЛЬСК"
(gdb) next
48        long rc = mapGetMapNameUn(hmap, &(buf[0]), sizeof(buf));
(gdb) next

Program received signal SIGSEGV, Segmentation fault.
0x767b6328 in mapGetMapNameUn () from /usr/local/lib/gisdesigner/libqdmapacces.so
(gdb)  
С этим разобрался, не был запущен X сервер, а без него почти все функции не работают/работают некорректно.
mapOpenData, например, с незапущенным X сервером, при открытии несуществующего файла может вернуть HMAP не равный нулю.
 
Цитата
Владимир Егоров написал:
Цитата
 Владимир Егоров  написал:
Запустил на нашей плате, под которую у нас есть собранные библиотеки, и получил SIGSEGV
Код
  Temporary breakpoint 1, main (argc=1, argv=0x7efff394) at main.cpp:81
81    {
(gdb) next
82        QCoreApplication a(argc, argv);
(gdb) next
83        panorama::IPanoramaFeature* test = nullptr;
(gdb) next
84        for (const auto& f: files){
(gdb) next
85            test = new tests::MapGetNameUn(f);
(gdb) next
86            bool status = test->run();
(gdb) step
tests::MapGetNameUn::run (this=0x43f60) at mapgetnameun.cpp:26
26    {
(gdb) next
27        if (!m_file.exists()){
(gdb) next
31        if (!gis::common::FileIsSupported(m_file, {FileType::Map,FileType::Mtw,
(gdb) next
39                    m_file.absoluteFilePath());
(gdb) next
40        HMAP hmap = mapOpenData(koi8r.constData(), GENERIC_READ);
(gdb) next
41        if (hmap == 0){
(gdb) next
46        QString koi8rMapName = gis::common::parseStringFromKOI8_R(mapGetMapName(hmap));
(gdb) next
47        WCHAR buf[1024] = {};
(gdb) print hmap
$1 = 6265020424
(gdb) print koi8rMapName.toStdString().c_str()
$2 = 0x440e8 "ПОДОЛЬСК"
(gdb) next
48        long rc = mapGetMapNameUn(hmap, &(buf[0]), sizeof(buf));
(gdb) next

Program received signal SIGSEGV, Segmentation fault.
0x767b6328 in mapGetMapNameUn () from /usr/local/lib/gisdesigner/libqdmapacces.so
(gdb)   
С этим разобрался, не был запущен X сервер, а без него почти все функции не работают/работают некорректно.
mapOpenData, например, с незапущенным X сервером, при открытии несуществующего файла может вернуть HMAP не равный нулю.
Лол, дело не в X сервере, и без него юнит тесты все отработали.
Видимо проблема была в том что я использовал другие заголовочные файлы, подправленные чтобы собиралось всё.
Посыпаю голову пеплом.
 
В новой версии 12.3.0 под Астра Линукс данная проблема исправлена
 
Цитата
Vladimir Letov написал:
В новой версии 12.3.0 под Астра Линукс данная проблема исправлена

Спасибо. Хотя теперь нужна будет активировать сложную цепочку
коммуникаций чтобы получить эту версию в нужной сборке.
Но это к делу не относится.
Страницы: Пред. 1 2
Читают тему (гостей: 1)



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

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