Page 1 of 1

Segmentation fault

Posted: Fri Jun 05, 2020 7:24 am
by AntonyTony
В моём проекте есть несколько библиотек, с UI и без. В тех, что без интерфейса программа падает с ошибкой Segmentation fault, а конкретно при создании

Code: Select all

wxDynamicLibrary lib(name);
и при создании сокета

Code: Select all

wxSocketBase *s = new wxDatagramSocket( _address, wxSOCKET_REUSEADDR );
Ошибка связана с m_parent, он всегда пуст (0x0) и возникает она в библиотеках wincmn, msgdlg
В библиотеках с интерфейсом все работает нормально.
Может кто подсказать в чём мой косяк?

Re: Segmentation fault

Posted: Sun Jun 07, 2020 1:49 pm
by T-Rex
Без более объемного примера трудно понять, в чем проблема. Проверь calling convention, чтобы везде был STDCALL.
Проверь чтобы у всех библиотек был одинаковый С++ Runtime. Если библиотеки с wxWidgets, то чтобы везде была одинаковая версия wxWidgets.

Пример вон есть с UI и без. https://github.com/T-Rex/wxModularApp

Re: Segmentation fault

Posted: Mon Jun 08, 2020 5:48 pm
by ONEEYEMAN
Dobrogo vremeni sutok,
A mogno poluchit back-trace pri padenii?
I kakja versija biblioteki i kakaja operacionka?

Spasibo.

Re: Segmentation fault

Posted: Tue Jun 09, 2020 11:53 am
by AntonyTony
libwx_gtk2u_core-3.0.so.0!wxWindow::RemoveChild(wxWindow * const this, wxWindowBase * child) Line 3561 C++
> libwx_gtk2u_core-3.0.so.0!wxWindowBase::~wxWindowBase(wxWindowBase * const this) Line 491 C++
libwx_gtk2u_core-3.0.so.0!wxWindow::~wxWindow(wxWindow * const this) Line 2477 C++
libwx_gtk2u_core-3.0.so.0!wxControlBase::~wxControlBase(wxControlBase * const this) Line 48 C++
libwx_gtk2u_core-3.0.so.0!wxControl::~wxControl(wxControl * const this) Line 20 C++
libwx_gtk2u_core-3.0.so.0!wxStaticTextBase::~wxStaticTextBase(wxStaticTextBase * const this) Line 31 C++
libwx_gtk2u_core-3.0.so.0!wxStaticText::~wxStaticText(wxStaticText * const this) Line 16 C++
libwx_gtk2u_core-3.0.so.0!wxStaticText::~wxStaticText(wxStaticText * const this) Line 16 C++
libwx_gtk2u_core-3.0.so.0!wxWindowBase::Destroy(wxWindowBase * const this) Line 576 C++
libwx_gtk2u_core-3.0.so.0!wxWindowBase::DestroyChildren(wxWindowBase * const this) Line 608 C++
libwx_gtk2u_core-3.0.so.0!wxWindow::~wxWindow(wxWindow * const this) Line 2510 C++
libwx_gtk2u_core-3.0.so.0!wxNonOwnedWindowBase::~wxNonOwnedWindowBase(wxNonOwnedWindowBase * const this) Line 25 C++
libwx_gtk2u_core-3.0.so.0!wxNonOwnedWindow::~wxNonOwnedWindow(wxNonOwnedWindow * const this) Line 229 C++
libwx_gtk2u_core-3.0.so.0!wxTopLevelWindowBase::~wxTopLevelWindowBase(wxTopLevelWindowBase * const this) Line 59 C++
libwx_gtk2u_core-3.0.so.0!wxTopLevelWindowGTK::~wxTopLevelWindowGTK(wxTopLevelWindowGTK * const this) Line 796 C++
libwx_gtk2u_core-3.0.so.0!wxTopLevelWindow::~wxTopLevelWindow(wxTopLevelWindow * const this) Line 395 C++
libwx_gtk2u_core-3.0.so.0!wxNavigationEnabled<wxTopLevelWindow>::~wxNavigationEnabled(wxNavigationEnabled<wxTopLevelWindow> * const this) Line 182 C++
libwx_gtk2u_core-3.0.so.0!wxDialogBase::~wxDialogBase(wxDialogBase * const this) Line 72 C++
libwx_gtk2u_core-3.0.so.0!wxDialog::~wxDialog(wxDialog * const this) Line 80 C++
libwx_gtk2u_core-3.0.so.0!wxGenericProgressDialog::~wxGenericProgressDialog(wxGenericProgressDialog * const this) Line 724 C++
wxProgressDialog::~wxProgressDialog(wxProgressDialog * const this) Line 36 C++




wxWidgets 3.0.2
запускаю на Debian 10

Re: Segmentation fault

Posted: Tue Jun 09, 2020 9:34 pm
by ONEEYEMAN
Dobrogo vremeni sutok,
Ochen tjagelo skazat bez coda.

Kakaja operacija vypolnjalas pered padeniem?

Spasibo.

Re: Segmentation fault

Posted: Wed Jun 10, 2020 6:15 am
by AntonyTony
Мой проект при сборке под винду выравнивает структуры в 1 байт, а под линукс я успешно заккоментил эту строку. Скорее всего в этом вся проблема.
При сборке библиотеки wx на линуксе можно указать выравнивание структур?
Собирал следующим образом:

Code: Select all

$ ../configure --enable-unicode --enable-debug --disable-shared --disable-monolithic
$make
$make install
Так же написал пример:
Main.h

Code: Select all


#pragma once
#include <iostream>
wxString GetFullPathToFile(wxString fileName);

Main.cpp

Code: Select all


#include <wx/file.h>
#include <wx/stdpaths.h>
#include <wx/filename.h>

#include "Main.h"

int main()
{
	wxString fullPathToSumLib = GetFullPathToFile("SumLib.so");
	return 0;
}
wxString GetFullPathToFile(wxString fileName)
{
	wxStandardPaths path = wxStandardPaths::Get();
	wxString sPathExe = path.GetExecutablePath();

	int res = sPathExe.size();

	wxFileName fName(sPathExe);

	wxString fullPathToLib;
	fullPathToLib = fName.GetPathWithSep();
	fullPathToLib += fileName;

	return fullPathToLib;
}
CMakeLists.txt

Code: Select all


project( Main )


find_package(wxWidgets COMPONENTS base core ) 
include(${wxWidgets_USE_FILE})

if ( UNIX )							
	set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=c++0x -fpack-struct=1 ") 	
	set (CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()

add_executable (Main "Main.cpp" "Main.h")

target_link_libraries(  ${PROJECT_NAME} ${wxWidgets_LIBRARIES} )

set_target_properties( ${PROJECT_NAME} PROPERTIES 
				RUNTIME_OUTPUT_DIRECTORY_DEBUG   	${EXE_DIR}
				RUNTIME_OUTPUT_DIRECTORY_RELEASE 	${EXE_DIR} )
В итоге, с выравниванием прога падает на первой строчке в функции 'GetFullPathToFile':

Вывод:

Code: Select all

Program received signal SIGSEGV, Segmentation fault.
__memmove_avx_unaligned_erms () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:383
Segmentation fault

Стек:

Code: Select all

 	libc.so.6!__memmove_avx_unaligned_erms() Line 383	C++
 	libstdc++.so.6!void std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_construct<wchar_t*>(wchar_t*, wchar_t*, std::forward_iterator_tag)	
>	wxString::wxString(wxString * const this, const wxString & stringSrc) Line 1220	C++
 	wxStandardPaths::wxStandardPaths(wxStandardPaths * const this) Line 18	C++
 	GetFullPathToFile(wxString fileName) Line 52	C++
 	main() Line 13	C++

Могу я пересобрать библиотеку wx с выравниванием?
Заранее спасибо)

Re: Segmentation fault

Posted: Thu Jun 11, 2020 9:05 pm
by T-Rex
Можно попробовать configure скрипту от wxWidgets скормить кастомные CXXFLAGS и CFLAGS и добавить туда -fpack-struct=1

Re: Segmentation fault

Posted: Thu Jun 11, 2020 11:16 pm
by ONEEYEMAN
Dobrogo vremeni sutok,
Kakaja versija g++?

Spasibo.

Re: Segmentation fault

Posted: Tue Jun 16, 2020 6:24 am
by AntonyTony
версия g++ 4:8.3.0-1

Re: Segmentation fault

Posted: Tue Jun 16, 2020 6:48 am
by ONEEYEMAN
Doborogo vremeni sutok,
2 veschi:

1. Klientskoe prilogenie i biblioteka wxWidgets dolgny sobiratsja s odnimi i temi ge parametrami. Inache budet kak v Vashem sluchae.
2. Ne sovsem ponimaju dlja chego nugno zakazyvatr eto vyravnivanie i tolko dlja *nix.

Prosto peresoberite biblioteku s sootvetstvujuschimi parametrami ili uberite kondishn v "CMakeList".

Izmemenie parametrov kompiljacii - eto garantija togo chto programma budet valitsja ili budet pokazyvat "Undefined behavior".
Poetomu vsja dokumentacija po wxWidgets govorit chto prilogenie klient i biblioteka DOLGNY kompilirovatsja S ODINAKOVYMI PARAMETRAMI.

Spasibo.

Re: Segmentation fault

Posted: Tue Jun 16, 2020 11:40 am
by AntonyTony
Я перестроил библиотеку и пример заработал

Code: Select all

$ ../configure CFLAGS=”-fPIC” CXXFLAGS=”-std=c++11 -fpack-struct=1 -fPIC” --enable-unicode --enable-debug --disable-shared --disable-monolithic
но мой проект теперь падает на "Arithmetic exception"

Code: Select all

(gdb) run
Starting programm: /media/....
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Programm received signal SIGFPE, Arithmetic exception.
0x0000555555ac570 in wxEncodingNameCache_wxImplementation_HashTable::GetNode (
	this=0x555555e4a620 <gs_nameCache>,
	[email protected]: wxFONTENCODING_UTF8) at ... /src/common/strconv.cpp:3087
	3087		WX_DECLARE_HASH_MAP( wxFontEncoding, wxString, wxIntegerHash, wxIntegerEqual,
(gdb)
Ответ на вопрос о выравнивании: весь проект был написан не мной, мне поручили перевести его под кроссплафторму, попутно доделывать некоторые функции и исправлять старые баги. Зачем и почему они сделали так я уже не узнаю. С дефолтным выравниванием проект не собирается. Работаю с тем, что имею. Как то так.

Re: Segmentation fault

Posted: Tue Jun 16, 2020 2:32 pm
by ONEEYEMAN
Доброго времени суток,
А какую ошибку выдаёт без выравнивания?
И можно получить backtrace при exception?

Спасибо.

Re: Segmentation fault

Posted: Mon Jun 22, 2020 11:27 am
by AntonyTony
В итоге, в одной из вызываемых библиотек, во время загрузки создавалась глобальная переменная wxAppConsole. Удалив её всё заработало. Всем спасибо)