Я хочу реализовать код отладки для моего проекта, который находится в c. В моем проекте у меня так много функций и вызовов функций. Я хочу написать код таким образом, что при вызове функции он должен печатать имя функции и имя вызывающего. Может ли кто-нибудь дать мне ключ к этому?Как узнать вызывающего абонента функции
1
A
ответ
5
Библиотека libunwind может вам помочь. Но это будет довольно медленно и может дать очень непредсказуемые результаты в случае оптимизированных двоичных файлов.
Вам действительно нужно реализовать это в приложении? Не работает ли приложение под gdb
с некоторыми точками останова?
Другой способ генерации трассировок без большой зависимости - это просто переместить некоторые вызовы функций в макрос вроде этого (очень тривиальное решение, оно может сделать больше).
#define TRACE(s) { printf("Doing %s\n", #s); s; }
0
Вы могли бы реализовать макрос для вас функций, которые отображают звонящим, если в режиме отладки
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEBUG_MODE
#ifdef DEBUG_MODE
int test(int , const char *) ;
#else
int test(int) ;
#endif
#ifdef DEBUG_MODE
int test(int n , const char * c)
{
printf("current: %s caller: %s\n" , __func__ , c) ;
return n + 123 ;
}
#define test(n) test(n,__func__)
#else
int test(int n)
{
return n + 123 ;
}
#endif
int main(void)
{
int n = test(3) ;
printf("result: %d\n" , n) ;
return 0;
}
Смежные вопросы
- 1. Как узнать класс вызывающего абонента функции
- 2. Как узнать имя объекта вызывающего абонента во время функции?
- 3. Javascript Родители функции вызывающего абонента
- 4. Java: Как получить имя функции вызывающего абонента
- 5. имя вызывающего абонента функции в анонимной функции
- 6. Как назвать имя вызывающего абонента, а не номер вызывающего абонента?
- 7. Как определить вызывающего абонента в haxe?
- 8. Nodejs: получить имя функции вызывающего абонента
- 9. jQuery getJSON - Возвращаемое значение функции вызывающего абонента
- 10. Доступ к внешним аргументам функции вызывающего абонента
- 11. Поиск функции вызывающего абонента в C
- 12. Проверка безопасности в функции вызывающего абонента
- 13. Функции вызова вызывающего абонента без видимых причин
- 14. Получить идентификатор вызывающего абонента
- 15. Как вернуть вызывающего абонента setOnClickListener?
- 16. Plivo - Идентификатор вызывающего абонента
- 17. Обнаружение вызывающего абонента
- 18. PlayFramework Запись имени вызывающего вызывающего абонента
- 19. Получение имени функции вызывающего абонента внутри другой функции в Python?
- 20. Как найти функцию вызывающего абонента в angularjs
- 21. Получить имя метода вызывающего абонента
- 22. Как я могу найти вызывающего абонента из внутренней функции?
- 23. Как напечатать имя объекта вызывающего абонента внутри функции члена класса?
- 24. Как напечатать имя функции вызывающего абонента в перегруженном новом операторе?
- 25. Как получить элемент вызывающего абонента в функции href javascript?
- 26. отладка вызывающего абонента внутри рельсов
- 27. Идентификатор вызывающего абонента в Plivo
- 28. Android говорит имя вызывающего абонента
- 29. Twiml получает номер вызывающего абонента
- 30. alloca() в пространстве вызывающего абонента
Похоже, вы хотите StackTrace. Хотя это, безусловно, возможно написать такой код, также, безусловно, проще использовать отладчик, чтобы сказать вам. Есть ли причина, которая не сработает? – FatalError
Если вы используете GCC, вы можете взять адрес, возвращенный '__builtin_return_address', и сделать некоторые умные трюки, чтобы разрешить им имена функций. – tangrs