Я перекрестно скомпилировал приложение, которое использует boost :: asio library и протестировало его в моей целевой системе. Он работает правильно. Но когда я пытаюсь отладить мое приложение с помощью GDB, я получаю это сообщение в GdB-консоли:Ошибка сегментации только во время отладки GDB
Program received signal SIGSEGV, Segmentation fault.
_dl_debug_initialize (ldbase=4294967292, ns=1996288212) at dl-debug.c:55
55 if (r->r_map == NULL || ldbase != 0)
Результат одинаковый для удаленной и родной отладки, а также для ряда других библиотек наддува (но не для всех) , После поиска любой информации, которая может быть полезна, я нашел аналогичную проблему в этом документе (стр.63): http://support.garz-fricke.com/products/Santaro/Linux-Yocto/Releases/Yocto-jethro-5.1-r6859-0/GUF-Yocto-jethro-5.1-r6859-0-IMX6GUF-Manual.pdf Как сказано в документе, проблема может быть вызвана «статическим инициализацией в неявно реализованных методах C++» и связана с glibc , Так что я попытался воспроизвести эту ошибку при таком подходе с кодом:
#include <iostream>
using namespace std;
class AClass
{
public:
void foo()
{
static int NmbOfInvokes = 0;
NmbOfInvokes++;
cout << NmbOfInvokes << endl;
}
};
int main(void)
{
cout << "Hello World" << endl;
AClass anInstance;
anInstance.foo();
anInstance.foo();
return 0;
}
Эта программа работает нормально, но при отладке не удается с той же ошибкой SIGSEGV.
Чтобы это исправить достаточно переписать класс AClass таким образом:
class AClass
{
public:
void foo();
};
void AClass::foo()
{
static int NmbOfInvokes = 0;
NmbOfInvokes++;
cout << NmbOfInvokes << endl;
}
флагов компиляции:
arm-poky-linux-gnueabi-g++ -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi -DHAVE_CONFIG_H -I. -I.. --sysroot=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi -g -O0 --sysroot=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi -MT SegFault_Reproduce.o -MD -MP -MF .deps/SegFault_Reproduce.Tpo -c -o SegFault_Reproduce.o SegFault_Reproduce.cpp mv -f .deps/SegFault_Reproduce.Tpo .deps/SegFault_Reproduce.Po
../arm-poky-linux-gnueabi-libtool --tag=CXX --mode=link arm-poky-linux-gnueabi-g++ -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi -g -O0 --sysroot=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi --sysroot=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi -o SegFault_Reproduce SegFault_Reproduce.o
arm-poky-linux-gnueabi-libtool: link: arm-poky-linux-gnueabi-g++ -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi -g -O0 --sysroot=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi --sysroot=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa7hf-vfp-neon-poky-linux-gnueabi -o SegFault_Reproduce SegFault_Reproduce.o
Я полагаю, что в каком-то импульсе библиотека используется аналогичным статический при создании экземпляра, потому что симптомы точно такие же.
Что я могу сделать, чтобы получить возможность отладки приложений расширения?
Версии пакетов, которые я использовал: yocto 2.0.1, gcc 5.2.0, gdb 7.9.1, boost 1.58.
@Employed_Russian, спасибо за ответ! 'set disable-randomization off' мне не помог, поэтому я попробую новую версию GDB и сообщите о результатах. –
@Employed_Russian, вы были предельно правы! После обновления GDB до 7.11.1 моя проблема исчезла. Большое спасибо! –