我如何'潜水'一个指向动态分配的整数数组的int*并将其表示为一个固定的int []数组?换句话说,如果我潜入一个int*它显示地址和int指向,但我希望看到所有整数的数组.
小智 8
我在这个问题上注意到了TotalView标签.您是否在询问如何在totalview中查看数组中的值?如果是这样,那么答案很简单.
假设你有一个int*类型的指针p,你现在指向一个有10个整数的数组.
步骤1.潜入指针.这是通过双击,单击鼠标中键或使用上下文菜单上的潜水选项完成的 - 所有这些都是将鼠标光标放在源代码窗格或堆栈框架窗格中的变量之后.
这将带来一个新窗口
表达式:p地址:0xbfaa1234类型:整数*
在数据区域中会说出类似的内容
0x08059199 - > 0x000001a5(412)
此窗口显示指针本身,列出的地址是指针的地址.值(上例中的0x08059199)是指针所具有的实际值.箭头右侧的所有内容都只是一个"提示",告诉您希望它指向.
步骤2.再次潜入指针.重复双击或鼠标中键,这次是变量窗口中的数据值.(所以你双击它所在的位置0x08059199).
这将有效地"取消引用"指针.现在窗口不是关注指针本身而是指针指向的东西.请注意,地址框现在包含0x08059199,这是之前的值.
表达式:*(((int*)p))地址:0x08059199类型:int
在数据区域中,它会说出类似的东西
0x000001a5(412)
步骤3.将数据窗口转换为所需的类型.只需单击类型字段并将其更改为int [10].然后点击返回.
这告诉调试器0x08059199是10个整数数组的开头.
该窗口将生成两个新字段:Slice和Filter.你现在可以将它们单独留下,但它们可以在以后使用.
数据区域现在将显示两列"字段"和"值"以及10行.
字段列将是数组[0] - [9]中的索引,值列将告诉您每个数组位置中的数据.
其他提示:
在更复杂的数据结构中,您可能希望潜入单个元素(也可能是指针,潜水也会取消引用它们)
您总是可以转换为不同的类型或长度来查看数据"就好像是"
您可以通过单击值列并编辑在那里找到的内容来编辑实际数据值.当您想要从应用程序中激发特定的错误行为时,这非常有用
您始终可以使用变量窗口右上角的"<"图标撤消潜水操作.
您可能会发现一些有用的在线视频
http://www.roguewave.com/products/totalview/resources/videos.aspx
特别是有一个标有"TotalView入门"的标题.
有关TotalView使用技巧,请随时联系Rogue Wave Software!roguewave dot com的支持是一个很好的解决方案.
Chris Gottbrath(roguewave dot com的Chris dot Gottbrath)Rogue Wave Software的TotalView产品经理