#c #gdb
#c #gdb
Вопрос:
Пожалуйста, рассмотрите:
void bar (int* ptr3)
{
printf ("n*ptr3 =%dn",*ptr3);
}
void foo (int* ptr2)
{
*ptr2 =5;
bar (ptr2);
}
int main()
{
int numb = 5;
int *ptr = amp;numb;
foo (ptr);
printf("nHello !!!n");
return 0;
}
Возможно ли отслеживать ptr
таким образом, чтобы в какой-то момент я мог узнать обратную трассировку переменной, что-то вроде:
bar() : ptr3
foo() : *ptr2 =5;
main(): int *ptr = amp;numb;
Грубо говоря: можем ли мы каким-либо образом получить историю указателей в gdb.
На самом деле, это может помочь в устранении утечек памяти / UMR, о которых сообщается через Purify.
Спасибо.
Ответ №1:
Ваш вопрос очень неясен, как и в вашем примере ptr3 == ptr2 == ptr == amp;numb
, так что именно вы подразумеваете под «историей указателей»?
Похоже, что вы просите отслеживать изменения в значении, на ptr
которое указывает (т. е. изменения в numb
). Вы можете сделать это с помощью контрольных точек GDB.
Комментарии:
1. Не отслеживается значение. Но просматривать обратные трассировки (соответствующие переменной pointer) в любой момент времени. Возможно ли это? — Спасибо.
2. Извините, но я совершенно не понимаю, о чем вы просите.
3. Предположим, ptr передается следующим образом: func1 { *ptr определен, func2_called(ptr) } ………. func2 (*ptr) { изменяет значение и передает ptr в func3(). Возможно ли выполнить обратную трассировку для самого PTR, чтобы получить трассировку типа: func3() —> func2()—> func(1).