有没有办法通过使用 gdb 准确地知道 RTEMS 应用程序上的堆和堆栈的地址范围?我知道info proc mappings
Linux 上有,但我认为 RTEMS 没有 /proc 开头。用来x
检查内存会很好,但我需要知道两者的地址范围。
我知道http://www.rtems.org/wiki/index.php/Debugging中有一些提示,但他们自己承认这些确实是粗略的估计。
有没有办法通过使用 gdb 准确地知道 RTEMS 应用程序上的堆和堆栈的地址范围?我知道info proc mappings
Linux 上有,但我认为 RTEMS 没有 /proc 开头。用来x
检查内存会很好,但我需要知道两者的地址范围。
我知道http://www.rtems.org/wiki/index.php/Debugging中有一些提示,但他们自己承认这些确实是粗略的估计。
一周前我也厌倦了想弄清楚同样的事情。但我发现它完全取决于操作系统和代码的实现。因为 gcc 编译器需要 8mb 的内存用于堆栈,并且那里的地址范围将继续存在随着你一次又一次地编译它而改变。所以你必须知道它存储在连续堆栈中还是在内存中与堆块交错的堆栈中。按照链接你会发现一些提示
对于堆,您可以研究Heap_Control
结构(在 cpukit/score/include/rtems/score/heap.h 中定义)和两个变量,RTEMS_Malloc_Heap
以及_Workspace_Area
. 特别是您似乎对Heap_Control.area_begin
andHeap_Control.area_end
字段感兴趣。_Workspace_Area
可以是堆的一部分或单独的内存区域,它保存内核数据结构。RTEMS_Malloc_Heap
指向描述传统 C 程序堆的 Heap_Control的点。
对于堆栈,您可以查看与要检查其堆栈的线程相关联的Thread_Start_information
结构(在 cpukit/score/include/rtems/score/thread.h 中定义) 。您可以使用宏Thread_Control
获得指向正在执行的线程的指针。_Thread_Executing