deleting wxConfig CRASH on 64 bit machine Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

deleting wxConfig CRASH on 64 bit machine

Post by cutecode »

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

Code: Select all

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

	delete test;  //---- the CRASH is here
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Post by ONEEYEMAN »

Dobrogo vremeni sutok,
Zachem takie slognosti?

Ispolzujte wxConfigBase::Get().
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Post by cutecode »

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

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;
}
то возвращает правильную строку
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Post by ONEEYEMAN »

Hi,
Use Get/SetPath().

A kakaja versija biblioteki ispolzuetsja?
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Post by cutecode »

уже пробовал 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
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Post by ONEEYEMAN »

A kakoj kompiljator? I kak kompilirovalas biblioteka?

A k voprosu o staticheskih funkcijah - SetAppName()/SetVendorName() vyzyvali?
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Post by cutecode »

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
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Post by ONEEYEMAN »

Добрый день/вечер.
Компилировалось все в 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
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Post by cutecode »

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?
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Post by ONEEYEMAN »

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

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

По поводу wxConfig - не знаю. Надо посмотреть. Пока с этим не заморачивался.
И кстати что значит "и в двух местах одновременно"? Вы пишете в wxConfig в нитке?
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Post by cutecode »

да вроде проверял же. Причем выше указанный код глючит как На 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 тоже заработает
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Post by ONEEYEMAN »

Есть возможность потрассировать одновременно пример и Ваше приложение?
Просто посмотреть что происходит в момент краша...
Я так понимаю что кода написано много, поэтому проще так.
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Post by cutecode »

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

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

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

Спасибо вам за ваше терпение и подсказки
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: deleting wxConfig CRASH on 64 bit machine

Post by ONEEYEMAN »

А библиотеку переуомпилировали с теми же параметрами?
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: deleting wxConfig CRASH on 64 bit machine

Post by cutecode »

библиотеку пока не трогал, но позже точно пререкомпилирую.
Ибо при компиляции моего проекта выходят теже предупреждения на wxWidgets *.h
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
Post Reply