2017-02-15 2 views
2

私は、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。

答えて

2

しかし、私は、GDBと私のアプリをデバッグしようとすると、私はこのメッセージ

これは、GDBのバグを示唆して取得します。あなたのバージョン:7.9.1はほぼ2歳です。最初のステップは、より最近のGDBリリースを試すことです。

"under GDB"と "native"の違いの1つは、GDBがASLRを無効にすることです。

プログラムを実行する前に(gdb) set disable-randomization offにお試しください。しかし、あなたが記述した症状を考えると、私はそれが問題と関係があるのか​​疑問です。

+0

@Employed_Russian、返信ありがとうございます! 'set disable-randomization off'は私を助けませんでしたので、私はGDBの新しいバージョンを試し、結果について報告します。 –

+0

@Employed_Russian、あなたは非常に正しかった! GDBを7.11.1にアップデートした後、私の問題は解消されました。どうもありがとう! –

関連する問題