在从旧开发板迁移到新开发板(带有 ARM cortex A9 的 iMX6 saber lite 板)后,我正在尝试调试应用程序。我还在主机上运行 gdb 并在开发板上运行 gdbserver,如 __answer__ 部分中所述,如何更改 gdb 在交叉(ARM)调试中使用的运行时库(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_201204 rootfs。
感谢您的帮助