2013-03-12 142 views
2

我試圖在從舊開發板遷移到新開發板(帶有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。

謝謝您的幫助

回答

2

你可以先檢查libthread_db.so存在於電路板,它是剝開(檢查nm輸出)?我從來沒有用過LTIB親自但是從第2頁該Freescale application note

要正確捕捉法的事件,如加載共享庫或 創建一個線程,實現這些共同 功能的共享庫必須部署在目標未剝離符號。對於 Linux用戶空間,對於i.MX/LTIB的特定情況,這些是ld.so,libthread_db.so,libpthread.so和 ,以實現在LTIB目標圖像生成菜單上取消選中 選項。

+0

你好。該庫確實存在於/ lib /中,並且'nm libthread_db-1.0.so'確實返回了很多符號。 'libthread_db-1.0.so'文件返回ARM共享庫沒有被去除。我不得不更換捆綁在板上的(預加載的)Timesys linux,因爲共享庫被剝離了。 – nass 2013-03-12 19:01:52

+0

另一件我認爲可能會發揮作用的就是將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

+0

我沒有使用-hf-工具鏈,因爲LTIB沒有它。所以我去了另一個非硬盤,它與LTIB的創建日期相似。我會重視你對我是否應該使用LTIB的HF工具鏈方面的評論,但也許我們應該在另一個頻道中討論它。不幸的是,雖然hf工具鏈包含剝離的庫,但非hf不包含。這就是爲什麼我最終詢問了問題中提供的鏈接中的sysroot命令。 – nass 2013-03-12 20:01:30