古い開発ボードから新しい開発ボード(ARM cortex A9を搭載したiMX6サーベルライトボード)に移行した後、アプリケーションをデバッグしようとしています。__answer__sectionで説明されているように、ホストでgdbを実行し、開発ボードでgdbserverを実行しています。クロス(ARM)デバッグでgdbが使用するランタイムライブラリ(libc、ldなど)を変更するにはどうすればよいですか。
アプリケーションを実行しようとしているときに、スレッドを作成する手順を実行すると、次のようになります。
(gdb)
681 if (pthread_create(&serial_thread, &attr_detach, read_serial, argv[1]) != 0){
(gdb)
Cannot remove breakpoints because program is no longer writable.
Further execution is probably impossible.
0x00023308 in main (
argc=<error reading variable: Cannot access memory at address 0x7efffc8c>,
argv=<error reading variable: Cannot access memory at address 0x7efffc88>)
at main_process/main_process.c:681
681 if (pthread_create(&serial_thread, &attr_detach, read_serial, argv[1]) != 0){
warning: Error removing breakpoint 0
Cannot access memory at address 0x7efffc88
(gdb) info threads
Id Target Id Frame
* 1 Thread 2588.2588 0x00023308 in main (
argc=<error reading variable: Cannot access memory at address 0x7efffc8c>,
argv=<error reading variable: Cannot access memory at address 0x7efffc88>)
at main_process/main_process.c:681
その後、デバッグの実行を続行できません。コードをステップスルーするのではなく、単にコードを実行すると、次のようになります。
(gdb) c
Continuing.
[Inferior 1 (process 2601) exited with code 0377]
作成するスレッドにブレークポイントを追加すると、そこで実行が停止しますが、その後も続行できません(終了しません)。
スレッドスタックサイズが小さい可能性について読みましたが、それは8MBであり、引数argv [1](現時点では空です)のみをスレッドに渡しています。
Linaro gcc-linaro-arm-linux-gnueabi-2012.04-20120426_linuxツールチェーンを使用して、アプリケーションを作成しました。ボード上で実行されている(そしてデバッグ中に使用される)共有ライブラリは、LTIB_201204rootfsに属しています。
ご協力ありがとうございました