有没有办法使用 gdb 准确地知道 RTEMS 应用程序上堆和堆栈的地址范围?我知道 Linux 上有 info proc 映射
,但我不认为 RTEMS 有/proc。使用 x 来检查内存会很棒,但我需要知道两者的地址范围。
我知道http://www.rtems.org/wiki/index.php/Debugging中有一些提示,但他们自己也承认这些确实是粗略的估计。
最佳答案
对于堆,您可以研究 Heap_Control
结构(在 cpukit/score/include/rtems/score/heap.h 中定义)和两个变量 RTEMS_Malloc_Heap
和_Workspace_Area
。您似乎对 Heap_Control.area_begin
和 Heap_Control.area_end
字段特别感兴趣。 _Workspace_Area
可以是堆的一部分或单独的内存区域,它保存内核数据结构。 RTEMS_Malloc_Heap
指向描述传统 C 程序堆的 Heap_Control。
对于堆栈,您可以查看关联的Thread_Control
中包含的Thread_Start_information
结构(在cpukit/score/include/rtems/score/thread.h中定义)与您要检查其堆栈的线程。您可以使用_Thread_Executing
宏获取指向执行线程的指针。
关于gdb - 如何使用 gdb 检查 RTEMS 应用程序的堆和堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23976961/