Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这样一个c++;工具存在吗?[我不知道该怎么称呼它]_C++_Visual Studio 2008_Profiling_Profiler - Fatal编程技术网

C++ 这样一个c++;工具存在吗?[我不知道该怎么称呼它]

C++ 这样一个c++;工具存在吗?[我不知道该怎么称呼它],c++,visual-studio-2008,profiling,profiler,C++,Visual Studio 2008,Profiling,Profiler,我正在经历一个试图弄清楚代码库是如何工作的过程。我想要一种工具来分析我从库中运行的程序,并告诉我每个线程以什么顺序调用什么函数。有这样的工具吗?我会用什么谷歌术语来寻找这样一个程序 注意:使用VS2008/Win7/C++您需要的是一个分析器。在Linux系统上,我会说“gprof”,但我真的无法说出MSVC选择的工具。一个探查器或代码覆盖工具会告诉你这一点。我认为调用图可能会帮助你。大多数分析器可以在分析后生成调用图。分析还可以帮助您确定最常用的代码 另一种可能性是使用工具生成序列图。这不会向

我正在经历一个试图弄清楚代码库是如何工作的过程。我想要一种工具来分析我从库中运行的程序,并告诉我每个线程以什么顺序调用什么函数。有这样的工具吗?我会用什么谷歌术语来寻找这样一个程序


注意:使用VS2008/Win7/C++

您需要的是一个分析器。在Linux系统上,我会说“gprof”,但我真的无法说出MSVC选择的工具。

一个探查器或代码覆盖工具会告诉你这一点。

我认为调用图可能会帮助你。大多数分析器可以在分析后生成调用图。分析还可以帮助您确定最常用的代码

另一种可能性是使用工具生成序列图。这不会向您具体显示运行时发生了什么,但会清楚地知道代码在做什么

问候
德克

您正在搜索探查器。这将帮助您找到一个。

,它可能对您的需要很有用。

您可以查看此问题,并且在linux中,我建议您使用您所描述的功能。我在谷歌上搜索了“ltrace for windows”,找到了。这就是“ltrace for windows”。

我最终使用的解决方案是。这段代码与我的程序一起运行,并在调用函数时以及调用完成时,使用缩进显示函数嵌入其他函数的深度,输出函数的全名(包括类)。只需稍加修改就可以去除多余的数据,但效果很好。我可能会将其修改为输出到excel,而不是像调用的那样输出到控制台

谢谢大家的回答。从所有的结果来看,他们中没有一个做得很好,但这有助于让我了解到底发生了什么

一些建议的答案可能有用,但它们都在我的脑海中,或者我无法让它们运行,或者我找不到我想要的功能

编辑:调用监视器类最终成为另一条错误线索。它以调用顺序显示函数名,并嵌套它们以显示哪些函数调用了哪些函数,这很好。我不得不过滤掉一些噪音,这很好。但最后,当我查看结果时,这个类错过了调用的全部函数的整整一半!哦,我不知道它是否能与线程一起正常工作,因为调用线程的函数是一些被跳过的函数


据我所知,我想要的是一个调用图。

如下所述,您可以使用探查器,但需要符号(如.pdb或.map)才能从中获得适当的信息。实际上,编写跟踪程序为您记录调用是非常简单的。您可以将WinDBG与WT命令一起使用,但要做好大量工作的准备。这个库,我可以假定它是一个.dll,并且有一些正在退出的程序[成功地]调用它吗?或者,您希望链接到的是一个.lib还是一个COM类型库?有趣的是,您的答案比我的答案高出了很多。我开始觉得说出你不知道的是件坏事很难说。你在我之前几秒钟才发帖,但我的回答提到了这个问题的不止一个解决方案。绝对是最好的答案。把你的答案整理一下,然后标记为已回答。我所说的清理是指对页面进行文本引用,而不仅仅是一个链接。链接可能会过时,但有了足够的信息,下一个用户仍然可以搜索它或类似的东西。例如[John Panzer.“自动代码检测”C/C++用户杂志,1999年1月]。将问题标记为已回答,即使你自己回答,这样,寻求帮助他人的人不会在已回答的问题中拖网,而寻求答案的人也知道该去哪里寻找。我一直在寻找的是呼叫图。结论信息在下面的回答中。