2011-08-28 130 views
1

我使用GNUEABI遠程調試的ARM設備列表線程/堆棧與GDB,我能夠設置斷點,步驟,查看內存等困難的ARM

...一般的生活好

然而,當斷任意然後鍵入「信息線」我得到線程的列表,但是這些符號的arent解決

例如

(gdb) info threads 
    7 Thread 10283 0x402a42a4 in ??() 
    6 Thread 10282 0x402a42a4 in ??() 
    5 Thread 10281 0x401c9d68 in ??() 
    4 Thread 10280 0x401c9d68 in ??() 
    3 Thread 10279 0x401cb3f4 in ??() 
*2 Thread 10278 0x401cb294 in ??() 
    1 Thread 10195 0x0001c5e0 in ??() 

如果我

設置一個斷點,然後等待它到達所有線程,但具有斷點的線程將如上所述,但如果我嘗試檢查其中一個線程的回溯,則帶有斷點的線程將解析

我看到的是這樣的事情

(gdb) bt 
#0 0x003d0f00 in ??() 
#1 0x0000027f in ??() 
#2 0x00000277 in ??() 
#3 0x4360c4e0 in ??() 
Backtrace stopped: previous frame inner to this frame (corrupt stack?) 

注:我不認爲堆棧腐敗,而我認爲GDB想堆棧腐敗有關的問題,並可能暗示?

想法? - 請記住,當斷點觸及調用堆棧時看起來不錯。

+0

查看/ proc//maps以查看這些地址是否在您期望的文件中。如果您使用> O0,您是否有-fno-omit-frame-pointer? (也可能是-mapcs-frame) – auselen

+0

我想知道你是否在使用正確的'libthread_db'? – jszakmeister

回答

-1

您是否有理由期望這些線程執行您的代碼?很多時候,線程正在運行庫代碼或休眠,無論哪種情況,它們都不會運行代碼。但是,當您在代碼中設置斷點時,只有在該線程實際運行代碼時纔會觸發。

我敢打賭,你會看到你的一些堆棧跟蹤代碼,但。一探究竟;這將是有啓發性的。

+0

我沒有看到痕跡中的代碼,除非我真的遇到了斷點 - 在這一點上,事情看起來不錯。我更新了上面的帖子來澄清 – stuck