私は、boost :: asioライブラリを使用するアプリケーションをクロスコンパイルし、ターゲットシステムでテストしました。それは適切に動作します。 (すべてではないため)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)
結果は、リモートおよびネイティブデバッグのために同じであり、他のいくつかのブーストライブラリの:私はgdbで私のアプリをデバッグしようとする。しかし、私は、GDB-コンソールでこのメッセージが表示されます。 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エラーで失敗します。
class AClass
{
public:
void foo();
};
void AClass::foo()
{
static int NmbOfInvokes = 0;
NmbOfInvokes++;
cout << NmbOfInvokes << endl;
}
コンパイルフラグ:この方法でクラスAClassはを書き換えるために十分なそれを修正する
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にアップデートした後、私の問題は解消されました。どうもありがとう! –