我正在尝试分析我在一台稍大的机器(32核,256GBRAM)上编写的多线程程序。我注意到在两次运行之间,程序的性能可能会有很大差异(70-80%)。我似乎无法找到程序性能中这种巨大差异的原因,但通过分析大量运行的“时间”实用程序的结果,我注意到非自愿上下文切换的数量与程序性能(显然,上下文切换越少,性能越好,反之亦然)。有什么好的方法可以确定是什么导致了这种上下文切换?如果我能找到罪魁祸首,那么也许我可以尝试解决问题。但是,我对可以使用的工具有一些特别的限制。首先,我在这台机器上没有root权限,所以任何需要这种权限的工具都被淘汰了。其次,它是一个相当老的内核(RHEL5,内核2.6.
有没有办法让valgrind使用多个处理器?我正在使用valgrind的callgrind进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在valgrind/callgrind之外运行时明显不同。在valgrind外部运行时,它会占用多个处理器,但在valgrind内部运行时只使用一个。这让我担心我的瓶颈会出现在不同的地方,从而使我的分析无效。 最佳答案 根据Valgrind文档,它们不支持多处理器:Themainthingtopointoutwithrespecttothreadedprogramsisthatyourpr
我想将日志记录添加到我们的单元测试中,以记录它们使用的DLL以及它们从何处加载。我可以从SysinternalsListDLLs获得我需要的信息,但我需要在测试过程运行时运行它,并且我最终会遇到竞争条件:例如,ListDLLs可能运行得太早,而错过在测试运行中途加载的DLL;或ListDLL可能运行得太晚,在测试进程退出后。同样,我可以从VisualStudio调试器的输出和模块窗口中获取我需要的信息,但我想在我们的构建服务器上自动执行此操作。是否有任何命令行工具可以运行任意EXE,跟踪它使用的DLL,并将信息记录到文件中? 最佳答案
我有很多使用拨号的用户。另外,我要为带宽付费。我有兴趣努力让我的应用程序更小,以帮助解决这两个问题;它现在约为200k,但如果它在100-150k范围内就更好了。但是,我不知道我的二进制文件中的哪些构造和位置使用了最多的大小,这使得调整起来很困难。是否存在有助于解决二进制大小问题的免费分析器? 最佳答案 VisualStudio有一个生成映射文件的选项,该文件将显示分配给程序每个部分的地址。在项目属性中,Linker->Debugging->GenerateMapFile。 关于c++-
Window的程序员如何分析他们的原生C++代码?在Unix/Linux上你有gprof[感谢Evan]&valgrind(我个人使用这个,虽然它不是真正的分析器),最近我在Mac和Solaris上,这意味着我搬到了dTrace。现在,当我过去需要在Windows上进行分析时,就像在我以前的工作中一样,我使用了Intel的vtune,它很棒,但是它是商业的,而且我没有私有(private)使用的许可证,所以我'我想知道Windows程序员常用的标准(免费更好)工具是什么?提前致谢 最佳答案 你应该给Xperf尝试一下-它是一种新的系
有没有人知道VerySleepy分析器是如何找到PDB文件的?它似乎没有使用_NT_SYMBOL_PATHenv变量。我已经成功地将PDB放在与可执行文件和DLL相同的目录中,但我正在尝试分析一个使用大量DLL的程序并且它正在真的很痛苦。有没有办法让它指向一个符号服务器? 最佳答案 原始.pdb文件的路径正在包含在DLL中。只是不要移动它们。VerySleepy的源代码是readilyavailable.它使用DbgHelpAPI,symbolinfo.cpp源代码文件。调用SymInitialize()允许工具指定符号的搜索路径,
Acouplearticles谈论ETW和“PerfMonitor.exe”。这些文章讨论了从命令提示符启动分析的能力。例如:PerfMonitor.exerunAnalyzeMySlowApplication.exe不知何故,我曾经或曾经有这样的印象,即PerfMon.exe是一款完全相同的工具。但是当我尝试对它使用命令行选项时,它不起作用。那么也许它们确实是两种不同的工具?或者一个是另一个的更新版本(删除或不删除命令行功能)?然后是PerfView工具。我想知道它是否是perfmonitor或perfmon的更新版本?或者它只是一个独立的工具?最后,这些工具提供的功能是否有分割?
我们的构建速度非常慢。这是一个用Ant构建的Java系统,我在WindowsXP上运行我的。根据硬件的不同,可能需要5到15分钟才能完成。观察机器上的整体性能指标,以及将硬件差异与构建时间相关联,表明该进程受I/O限制。它还表明该过程进行的读取比写入多得多。但是,我还没有找到一种好方法来确定哪些文件正在被读取或写入,以及读取或写入了多少次。我怀疑,随着我们的许多子项目和编译器的后续调用,构建会多次重新读取相同的常用库。有哪些分析工具可以告诉我给定进程正在对哪些文件执行什么操作?免费很好,但不是必需的。使用ProcessMonitor,assuggestedbyJonSkeet,我能够证
简短版:我正在寻找与Cocoa等价的WindowsAPI–windowDidChangeBackingProperties:NSWindowDelegate中的通知当窗口的色彩空间发生变化时调用的协议(protocol)(当它被移动到另一个显示器或当用户更改显示器配置文件时)。有谁知道Windows上的等效API是什么?长版:我正在开发一个完全颜色管理的应用程序。因此,当显示器的颜色配置文件更改或应用程序窗口移动到不同的屏幕时,我需要得到通知。在Mac端这很简单,我只是实现了–windowDidChangeBackingProperties:我的窗口委托(delegate)的方法,每当
当我尝试使用wincachegrind并获取cachegrind文件时,它返回Cannotfindcalltarget.cachegrind.outlinenumber:68有人知道怎么解决吗?更新,这是错误的屏幕截图:Clickthislink 最佳答案 可能您使用的是旧版本的WinCacheGrind。确保您的版本是最新的,从officialrepository下载.单击Releases并下载最新的wincachegrind-*.zip。 关于windows-Wincachegrin