Debugging 如何在程序中记录函数的运行信息?

Debugging 如何在程序中记录函数的运行信息?,debugging,function-calls,Debugging,Function Calls,我最近参加了一次编码面试,有人问了我一个不知道答案的问题。在网上搜索了几天后,我来到这里寻求帮助 问题描述如下:您应该提出一种方法来记录程序中函数的运行信息,例如,调用函数的次数,等等 顺便说一下,您不允许修改这些函数。也许您想在这些函数中定义一个全局变量来记录正在运行的函数,但这是不允许的 好的!这就是我在一次采访中遇到的问题 这是我使用C++宏所能想到的最好方法。我不知道它是否符合要求 非常基本的版本只记录计数。宏用宏的内容替换对函数的所有现有调用,宏记录统计信息并调用函数。可以轻松扩展以记

我最近参加了一次编码面试,有人问了我一个不知道答案的问题。在网上搜索了几天后,我来到这里寻求帮助

问题描述如下:您应该提出一种方法来记录程序中函数的运行信息,例如,调用函数的次数,等等

顺便说一下,您不允许修改这些函数。也许您想在这些函数中定义一个全局变量来记录正在运行的函数,但这是不允许的


好的!这就是我在一次采访中遇到的问题

这是我使用C++宏所能想到的最好方法。我不知道它是否符合要求

非常基本的版本只记录计数。宏用宏的内容替换对函数的所有现有调用,宏记录统计信息并调用函数。可以轻松扩展以记录更多细节。假设只有一个函数具有该名称,或者您希望所有函数都有一个计数。每个函数都需要一个宏

//这是我们的函数
void func()
{/*一些东西*/}
//这是增加的
int funcount=0;
#定义func(…)do{funcCount++;func(_VA_ARGS__)}while(0)
int main()
{
//调用函数
func();
//打印统计数据

非常感谢!但您的方法与使用全局变量的方法类似。我的意思是,我们如何在不修改程序的情况下记录调用函数的信息。在某些开发工具中,例如visual studio 2012,有一个调试工具,可以分析调用函数的次数和频率。因此,我想了解如何s调试工具实现此功能。@Dukelinga记录函数调用统计信息的任何方法都必须与此类似,尽管它可能看起来有点不同或处于较低的级别(即汇编程序/机器代码)。在调用函数之前和之后,您都有希望执行的代码,因此从逻辑上讲,在调用函数时,您必须转到您希望执行的代码之前,然后调用函数,然后转到您希望执行的代码之后。甚至。对于x86,这似乎是通过在此时将控制权传递给调试器来完成的。This遵循相同的主题,将程序的执行重定向到记录统计信息的位置。记录函数stats可以在函数的开始和结束处作为断点来实现(尽管我不确定是否这样做)如果你希望这个问题得到更多的关注,这是一个语言特定的问题,你应该添加可应用的语言标签(仅请一个)。如果这不是一个语言特定的问题,考虑使用标签。