我正在尝试调试应用程序,从旧的开发板迁移到新的开发板(带有ARM cortex A9的iMX6 saber lite板)。 我也在主机上运行gdb,在开发板上运行gdbserver,如__answer__section how can i change the runtime libraries (libc ,ld, etc) used by gdb in cross (ARM) debugging
中的解释在尝试运行应用程序并执行创建线程的步骤时,我得到了这个:
(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_201204 rootfs。
感谢您的帮助
答案 0 :(得分:2)
您是否可以首先检查主板上是否存在libthread_db.so
并且是否已解除提取(请检查nm
输出)?我从来没有亲自使用过LTIB,但从第2页开始Freescale application note:
正确捕获加载共享库等过程事件 创建一个线程,实现这些共同的共享库 功能必须部署在目标未剥离的符号上。对于 Linux用户空间是ld.so,libthread_db.so,libpthread.so和 对于i.MX/LTIB的特殊情况,要实现取消检查条带 LTIB目标图像生成菜单上的选项。