2011-08-28 126 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