在ARM上使用GDB列出线程/堆栈的难度

时间:2011-08-28 16:37:46

标签: debugging gcc gdb arm remote-desktop

我正在使用GNUEABI远程调试ARM设备,我可以设置断点,步进,查看内存等。

......一般生活都很好

但是当任意中断然后输入'info threads'时我会得到一个线程列表,但这些符号没有解析

例如

(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认为堆栈已损坏与问题有关并且可能是提示?

想法? - 请记住,当断点击中调用堆​​栈时看起来很棒。

1 个答案:

答案 0 :(得分:-1)

您是否有理由期望这些线程执行您的代码?很多时候,线程正在运行库代码或休眠,在任何一种情况下,它们都没有运行代码。但是,当您在代码中设置断点时,只有当该线程实际运行您的代码时才会触发该断点。

我敢打赌,你会在某些堆栈跟踪上看到一些代码。看看这个;这将是启发。