deleting wxConfig CRASH on 64 bit machine  [SOLVED]

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
User avatar
cutecode
Earned some good credits
Earned some good credits
Posts: 110
Joined: Fri Dec 09, 2016 7:28 am
Contact:

deleting wxConfig CRASH on 64 bit machine

Postby cutecode » Sat Dec 10, 2016 9:11 pm

Ни как ни пойму как правильно удалить wxConfig?
при 32 битной компиляции все нормально, а если компилирую для 64 битной машины, то прога рушится

Code: Select all

bool soft_itUApp::OnInit()
{
   wxConfig* test = new wxConfig(L"blabla", L"AxalayMaxalay");

   delete test;  //---- the CRASH is here
regards,
Alexander Saprykin

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 2058
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Postby ONEEYEMAN » Mon Dec 12, 2016 2:53 pm

Dobrogo vremeni sutok,
Zachem takie slognosti?

Ispolzujte wxConfigBase::Get().

User avatar
cutecode
Earned some good credits
Earned some good credits
Posts: 110
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Postby cutecode » Mon Dec 12, 2016 6:38 pm

А как тогда прочитать конкретные данные из реестра?
Нужна конкретная ветка реестра

Code: Select all

HKEY_CURRENT_USER\SOFTWARE\Soft-It\Dental-soft by Alex Saprykin\Settings\welcome


если делаю так, то возвращает пустую строку

Code: Select all

   wxString szRezult, szKEY = L"Soft-It/Dental-soft by Alex Saprykin/Settings/welcome";

   bool bRezult = wxConfig().Get()->Read(szKEY, &szRezult);


хотя если читаю так:

Code: Select all

   wxString szRezult, szKEY = L"Settings/welcome";
   bool bRezult = GetConfigWelcome()->Read(szKEY, &szRezult);


wxConfig* GetConfigWelcome()
{
   if (!configWelcome)
      configWelcome = new wxConfig(L"Dental-soft by Alex Saprykin", L"Soft-It");
   return configWelcome;
}


то возвращает правильную строку
regards,
Alexander Saprykin

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 2058
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Postby ONEEYEMAN » Mon Dec 12, 2016 7:25 pm

Hi,
Use Get/SetPath().

A kakaja versija biblioteki ispolzuetsja?

User avatar
cutecode
Earned some good credits
Earned some good credits
Posts: 110
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Postby cutecode » Mon Dec 12, 2016 8:36 pm

уже пробовал SetPath() устанавливает путь не ближе чем HKEY_CURRENT_USER\SOFTWARE\MyExeFileName

где MyExeFileName - имя exe-шника

А мне надо HKEY_CURRENT_USER\SOFTWARE\Soft-It

Использую wxWidgets C/C++
OS Windows

Как я уже говорил, используя new wxConfig - все четко работало на 32 битной компиляции
Мне бы как нибудь просто удалить ее (safely) после этого. А то CRASH-ится на 64 битной компиляции

Мож я не так копилирую 64 битную компиляцию? ибо она еще CRASH-ится при использовании класса wxStringTokenizer
regards,
Alexander Saprykin

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 2058
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Postby ONEEYEMAN » Mon Dec 12, 2016 9:06 pm

A kakoj kompiljator? I kak kompilirovalas biblioteka?

A k voprosu o staticheskih funkcijah - SetAppName()/SetVendorName() vyzyvali?

User avatar
cutecode
Earned some good credits
Earned some good credits
Posts: 110
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Postby cutecode » Mon Dec 12, 2016 10:26 pm

SetVendorName - не устраивает, т.к надо писать в разные ветки реестра

компилировал под Windows и под MAC и везде вылетает прога при 64 битной копиляции

под Windows компилировал из самого Visual Studio, там все по умолчанию.

под маком компилировал так (специально запомнил в блокноте)

Code: Select all

======================32bits RELEASE SHARED LIBs==========================================================================================
../configure --enable-unicode  --with-osx_cocoa --with-macosx-version-min=10.12 --with-macosx-sdk=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/ CC=clang CXX=clang++ CXXFLAGS="-stdlib=libc++ -std=c++11" OBJCXXFLAGS="-stdlib=libc++ -std=c++11" LDFLAGS=-stdlib=libc++  --disable-mediactrl --enable-macosx_arch=i386

======================64bits RELEASE SHARED LIBs==========================================================================================
../configure --enable-unicode  --with-osx_cocoa --with-macosx-version-min=10.12 --with-macosx-sdk=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/ CC=clang CXX=clang++ CXXFLAGS="-stdlib=libc++ -std=c++11" OBJCXXFLAGS="-stdlib=libc++ -std=c++11" LDFLAGS=-stdlib=libc++  --disable-mediactrl
regards,
Alexander Saprykin

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 2058
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Postby ONEEYEMAN » Mon Dec 12, 2016 11:12 pm

Добрый день/вечер.
Компилировалось все в Visual Studio или в командной строке?
Если в среде - все стандартные солюшки для библиотеки (которые в поставке) - для 32 бит. Для компиляции в 64 нужно делать тпансфер.
Приложение компилировалось тоже под 64 бита? Параметры солюшки для приложения и библиотеки одинаковые?

По поводу SetVendorName() - в чем проблема? Вызываем SetPath() с релятивным путем и вперед...

На Маке попробуйте прокомпилировать библиотеку вот так:

arch_flags="-arch i386"
../configure CFLAGS="$arch_flags" CXXFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" OBJCFLAGS="$arch_flags" OBJCXXFLAGS="$arch_flags"

arch_flags="-arch x86_64"
../configure CFLAGS="$arch_flags" CXXFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" OBJCFLAGS="$arch_flags" OBJCXXFLAGS="$arch_flags"

А потом _точно также_ прокомпилировать приложение.

И еще - почему не собираете debug version. Backtrace не получите...

User avatar
cutecode
Earned some good credits
Earned some good credits
Posts: 110
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Postby cutecode » Mon Dec 12, 2016 11:49 pm

1. спасибо, попробую перекомпилировать на маке, но думаю врятли поможет (см. ниже)
2. на винде собирал из Visual Studio, для перехода на 64бит там все просто.
3. параметры все вроде правильные ибо программа то сама запускается, но вылетает при вызовах некоторых процедур.
4. по поводу SetPath() пробовол же. она не поднимается выше корня, корень для нее это имя EXE-шника, а мне надо писать выше и в двух местах одновременно. если можно покажите пример, как записать одновременно в эти ветки

Code: Select all

HKEY_CURRENT_USER\SOFTWARE\Soft-It\Dental-soft by Alex Saprykin\Settings
HKEY_CURRENT_USER\SOFTWARE\dental-soft\Конфигуратор\test


5. на маке у меня дебаг есть для 32бит, я не думал, что там будут проблемы с 64бит

6. теперь упростил проблемную функцию.
вызываю функцию в своей программе

Code: Select all

void GetPart0()
{
    wxStringTokenizer tokenizer(L"131321", L"c", wxTOKEN_RET_EMPTY_ALL);
}

bool soft_itUApp::OnInit()
{
    wxMessageBox("tring to call");
    GetPart0();
    wxMessageBox("gotcha"); //---never called

и прога рушиться вот сообщение OS MAC

Code: Select all

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   soft_it64                        0x0000000103f76e7a wxStringTokenizer::~wxStringTokenizer() + 42
1   soft_it64                        0x0000000103f72434 GetPart0() + 228
2   soft_it64                        0x0000000103f72510 soft_itUApp::OnInit() + 128
3   libwx_osx_cocoau_core-3.1.1.0.0.dylib   0x000000010490ddce wxApp::CallOnInit() + 158


попробовал тоже самое вставить в samples/mdi - и прога не рушиться. О чудо. значит дело в моей программе, а не в компиляции wxwidgets?
regards,
Alexander Saprykin

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 2058
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Postby ONEEYEMAN » Tue Dec 13, 2016 1:06 am

Если в сампле все работает - значит что-то с программой не то.
Проверьте как собиралась программа - те ли опции компилятора/линкера и правильные ли библиотеки подключили.

В Винде - тоже провеоьте правильность библиотек и как собиралось приложение. Проверьте все опции компилятора/линкера чтобы они совпадали.

По поводу wxConfig - не знаю. Надо посмотреть. Пока с этим не заморачивался.
И кстати что значит "и в двух местах одновременно"? Вы пишете в wxConfig в нитке?

User avatar
cutecode
Earned some good credits
Earned some good credits
Posts: 110
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Postby cutecode » Tue Dec 13, 2016 6:20 am

да вроде проверял же. Причем выше указанный код глючит как На MAC, так и на Windows и только на 64 бит.
а в 32ит все работает в обоих операционках.

у меня в проге 4 *.lib скомпилированные с EXE-шником

вот данные в code::blocks для самой большой LIB-ы, где все эти функции находятся

Code: Select all

----------------------------------------------------------------------------------compiler
`wx-config --cxxflags -stdlib=libc++` -fPIC
-std=c++11
-U__STRICT_ANSI__

--------------------------------------------------------------------------------#defines
wxUSE_UNICODE
UNICODE
__WXDLLMAIN__
_CRT_RAND_S
__CODEBLOCKS__

__WXOSX__
__WXMAC__
__WXOSX_COCOA__
__declspec
WXUSINGDLL
NDEBUG

-------------------------------------------------------------------------------linker
`wx-config  --version=3.1 --static=no --unicode=yes  --libs`
-v
-mmacosx-version-min=10.12
-framework CoreFoundation

------------------------------------------------------------------------------includes for compoler
/Users/admin/Downloads/wx/_64x_release/lib/wx/include/osx_cocoa-unicode-3.1
/Users/admin/Downloads/wx/include
../contrib/databaselayer/include
../contrib/postgre/include
../contrib/postgre
../contrib/xlslib/xlslib/xlslib/src
../contrib/xlslib/xlslib/xlslib/build/CodeBlocks



по поводу wxConfig - пропустим, я думаю, если tockenize разаработает, то и wxconfig тоже заработает
regards,
Alexander Saprykin

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 2058
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine  [SOLVED]

Postby ONEEYEMAN » Tue Dec 13, 2016 12:53 pm

Есть возможность потрассировать одновременно пример и Ваше приложение?
Просто посмотреть что происходит в момент краша...
Я так понимаю что кода написано много, поэтому проще так.

User avatar
cutecode
Earned some good credits
Earned some good credits
Posts: 110
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Postby cutecode » Tue Dec 13, 2016 8:09 pm

УРА! Гууд Ньюз!

1. В винде включил максимальный уровень предупреждений
2. при копмпиляции стала ругаться на невозможность упаковать некоторые переменные
3. Включил максимальный уровень "struct alignment" в настройках проекта (switch /Zp6)
4 и все заработало ЫЫЫЫЫ

Это пока в винде. буду дальше пробовать под MAC и Ubuntu

Спасибо вам за ваше терпение и подсказки
regards,
Alexander Saprykin

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 2058
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Postby ONEEYEMAN » Tue Dec 13, 2016 10:42 pm

А библиотеку переуомпилировали с теми же параметрами?

User avatar
cutecode
Earned some good credits
Earned some good credits
Posts: 110
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Postby cutecode » Tue Dec 13, 2016 11:13 pm

библиотеку пока не трогал, но позже точно пререкомпилирую.
Ибо при компиляции моего проекта выходят теже предупреждения на wxWidgets *.h
regards,
Alexander Saprykin


Return to “wxWidgets Development (Russian)”

Who is online

Users browsing this forum: No registered users and 2 guests