【问题标题】:Suggestions for tools for tracing or profiling C++ console app execution and diffing traces对用于跟踪或分析 C++ 控制台应用程序执行和差异跟踪的工具的建议
【发布时间】:2023-03-14 03:26:01
【问题描述】:

我想使用两组不同的命令参数来跟踪 Nmap 的执行情况,并对结果进行比较,以便我可以了解为什么在代码中采用不同的路径。

在我的 Win32 XP SP3 机器上,nmap -F -v -d -n <target_host>nmap -F -v -v -d -n <target_host> 两个命令在代码中应该采用几乎相同的路径(除了处理额外的 -v arg 之外),但它们没有。我发现调用getAdapterAddresses 返回ERROR_INVALID_PARAMETER 存在一些问题,这导致nmap 退出并显示一条错误消息,该错误消息与参数略有不同。我已经提交了一个似乎可以解决 getAdapterAddresses 问题的补丁,但现在我想找出应用程序在不同位置退出的原因(请参阅此nmap-dev mailing-list post 及其后续跟进以了解更多背景信息)。

该项目是为 Visual Studio Express 2010 VC++ 设置的,我正在寻找一种方法来跟踪上述 Windows 框上的执行情况,然后对结果进行比较。

我应该寻找哪些工具?

【问题讨论】:

  • 对于系统调用,你可以试试STraceNT。对于库调用,请查看 Sysinterals 的Process Monitor
  • 感谢@KerrekSB,我确实需要跟踪 nmap 函数,但我会尝试您的建议,看看它们是否有什么好处。
  • STraceNT 产生了两个输出 ca。 1GB 几乎没有共同点,所以不是很有用。
  • 有趣。好吧,如果系统调用都不同,那么我假设程序在两种情况下确实采用了非常不同的代码路径。
  • 在进行参数解析之前,路径至少应该相同。我想我只需要跟踪 nmap 函数调用 - processmon 还给了我输出,这些输出非常不同且难以匹配

标签: c++ windows visual-c++ profiling trace


【解决方案1】:

如果没有人想出更好的方法,您可以使用 LukeStackwalker 来执行此操作,它会根据其分析的代码生成可视化调用图,因此您可以轻松地在视觉上比较这些图(以及调用次数和函数花费的时间)超过它所需要的样本数量)。

【讨论】:

  • 感谢您的建议。我发现 LukeStackwalker 对于比较两条轨迹不是很有用。我开始多次运行相同的命令并比较生成的 .lsd 文件 - 我发现每种情况下的采样都完全不同,我想这是堆栈采样方法的问题的症结所在。我发现调用图对于比较也毫无用处。我还必须让 nmap.main 休眠 5 秒,否则它会在 LS 甚至准备开始采样之前完成。
【解决方案2】:

Visual Studio 2010 PremiumUltimate 版本有一个很好的分析工具,可以从中导出生成报告的各种元素(csv 或 xml)。

我将调用树导出到 csv 并使用 Beyond Compare 区分它们,这对我有很大帮助。

【讨论】:

    猜你喜欢
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多