我試圖在從舊開發板遷移到新開發板(帶有ARM Cortex A9的iMX6 saber lite板)後調試應用程序。 我也運行的主機和gdbserver的開發板對GDB在這裏__answer__section how can i change the runtime libraries (libc ,ld, etc) used by gdb in cross (ARM) debugginggdb在產生線程後無法訪問變量
解釋試圖運行應用程序和執行步驟,以創建一個線程我得到這個:
(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。
謝謝您的幫助
你好。該庫確實存在於/ lib /中,並且'nm libthread_db-1.0.so'確實返回了很多符號。 'libthread_db-1.0.so'文件返回ARM共享庫沒有被去除。我不得不更換捆綁在板上的(預加載的)Timesys linux,因爲共享庫被剝離了。 – nass 2013-03-12 19:01:52
另一件我認爲可能會發揮作用的就是將LTIB中的'lib /'direcotory替換爲工具鏈中的'lib /'direcotory,也就是將'gcc-linaro-arm-linux-XXX/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf /'到'/ lib'。當你從GDB設置sysroot時也要小心。 – scottt 2013-03-12 19:44:26
我沒有使用-hf-工具鏈,因爲LTIB沒有它。所以我去了另一個非硬盤,它與LTIB的創建日期相似。我會重視你對我是否應該使用LTIB的HF工具鏈方面的評論,但也許我們應該在另一個頻道中討論它。不幸的是,雖然hf工具鏈包含剝離的庫,但非hf不包含。這就是爲什麼我最終詢問了問題中提供的鏈接中的sysroot命令。 – nass 2013-03-12 20:01:30