如何在 gdb 中跟踪从一个函数传递到另一个函数的指针
请考虑:
void bar (int* ptr3)
{
printf ("\n*ptr3 =%d\n",*ptr3);
}
void foo (int* ptr2)
{
*ptr2 +=5;
bar (ptr2);
}
int main()
{
int numb = 5;
int *ptr = &numb;
foo (ptr);
printf("\nHello !!!\n");
return 0;
}
是否有可能跟踪ptr
,以便在某些时候我可以找到变量的回溯,例如:
bar() : ptr3
foo() : *ptr2 +=5;
main(): int *ptr = &numb;
粗略地说:我们可以通过一些方式获取gdb中的指针历史记录吗?方式。
实际上,这可以帮助修复通过 Purify 报告的内存泄漏/UMR。
谢谢。
Please consider:
void bar (int* ptr3)
{
printf ("\n*ptr3 =%d\n",*ptr3);
}
void foo (int* ptr2)
{
*ptr2 +=5;
bar (ptr2);
}
int main()
{
int numb = 5;
int *ptr = &numb;
foo (ptr);
printf("\nHello !!!\n");
return 0;
}
Is it possible to track ptr
, in such a way that at some point I can find out the backtrace of the variable, something like:
bar() : ptr3
foo() : *ptr2 +=5;
main(): int *ptr = &numb;
Roughly: Can we get the pointer history in gdb through some way.
Actually, this can help in fixing Memory Leaks/UMR's reported through Purify.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的问题非常不清楚,如您的示例中的
ptr3 == ptr2 == ptr == &numb
,那么“指针历史记录”到底是什么意思?您似乎要求跟踪
ptr
指向的值的更改(即对numb
的更改)。您可以使用 GDB 观察点来做到这一点。Your question is very unclear, as in your example
ptr3 == ptr2 == ptr == &numb
, so what exactly do you mean by 'pointer history'?It appears that you are asking to track the changes to the value that
ptr
points to (i.e. changes tonumb
). You can do that with GDB watchpoints.