由于堆栈越来越多地变成了较小的addesses,因此使用gdb进行检查对我来说是很费劲的。到目前为止我使用
x/64xw 0xffffd0e8-64*4
如果我想看到位于0xffffd0e8(堆栈上)的值以及堆栈后面的值(在这种情况下是32位机器上的以下64个字)。
有更简单的方法吗?
另外,有没有办法用相应的变量名称自动标记堆栈上的内容?或者每行只显示一个单词,而不是四个单词?
答案 0 :(得分:2)
如果您没有调试信息来帮助您,除了了解ABI并手动阅读之外没有其他任何事情可以做,在GDB的帮助下,您可以做得很好仅基于ABI的一组事物(如回溯,但没有命名调用者)。
如果您确实有二进制文件的调试信息,可以使用np.savetxt('test.csv', first_layer_output, delimiter=',')
列出所选堆栈帧的局部变量,并使用info locals
,frame
,{在堆栈中导航{1}},bt
,info frame
,info frame <address>
,etc。
你无法真正注释&#34;内存,但你可以做的是创建convenience variables来动态创建GDB变量。
关于如何方便地读取大型内存数组,我发现使用up
和转换地址非常有用。例如:down
。并使用artifical arrays打印大区域。 GDB将聚合连续的相同值,使得非常清晰且易于读取同类内存区域(这不是堆栈的情况)。