- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个使用复杂数据结构的软件,我想了解该程序如何利用不同的缓存和寄存器。
问题:
我目前正在使用 Visual Studio,因此最好使用插件,但该程序是使用 gcc 编译的。
编辑:像 CodeAnalyst 和 CacheGrind 这样的分析器似乎只在程序执行后才做这种事情,就像分析器会做的那样,但我更感兴趣的是了解逐步执行的行为。
例子
Code Line 1; // break here and show which variables are currently stored where.
Code Line 2;
for(int i=0; i<some_var; i++) {
Code Line 3; // break here and compare cache contents.
}
最佳答案
恐怕您无法在运行时直接查看缓存状态,因为查看行为,尤其是涉及断点或管理此检查的某些代码时,会对缓存产生很大影响状态,实际上摧毁了你试图检查的东西。更糟糕的是 - 假设您可以使用一些简单的代码获得某种缓存图片或转储 - 但事实并非如此。
事实上,即使您在给定时刻神奇地获得了缓存状态的图片,几微秒后也不太可能有任何意义,因为页面映射可能不断变化,行被获取并从缓存中丢弃一直缓存,可能会刷新整个缓存。事实上,核心或 CPU 甚至可能会因短暂的断电而停止,并在此过程中自动刷新缓存中的所有内容。
这里有 3 种以非侵入方式查看缓存上下文的方法:
缺点是这些都不能保证重新生成与您在真实 CPU 上完全相同的场景。缓存模拟器是不现实的,因为它简化了对单个线性流的所有访问,忽略了例如由于分支预测错误而被刷新的真实 CPU 中的那些。缺少计时元素也可能会改变替换策略的行为方式,并给您带来不同的结果。这不太可能成为问题,它应该只在真正的极端情况下有所作为,但请记住这一点。时序模拟器更逼真,并且有更好的机会重现您的问题,但没有一个可用的模拟器必然会模拟您的 CPU 所拥有的完全相同的微体系结构。不过,您可以将它们配置为尽可能接近。
使用内部 CPU 性能计数器跟踪缓存相关统计数据。这为您提供了真实的画面,但不幸的是提供了较少的可见性,绝对不是实时的。一些分析器(包括 Vtune 等)可以为您完成繁重的工作,并呈现这些随着时间的推移采样的统计数据,这可能更有用。
添加专用代码,以便在您要检查缓存内容时以编程方式调用该代码。然后,此代码可以执行一些(有限的)检查,例如使用定时查找猜测缓存中是否存在特定行。它非常复杂,但如果您在那里寻找特定的线路,可能会更适合。我只是注意到我以一种非侵入性的方式写作 - 从头开始,这种方式当然是非常侵入性的。
关于c++ - 在调试期间显示 cpu 缓存和寄存器内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23799938/
昨晚我因为这个问题脑子崩溃了。在确保没有来 self 的 eclipse 错误检查的明显错误之后,我开始调试我的程序。顺便说一下,我正在使用 Jre7。无论如何,每次我进入我的类调用(我们称之为“a”
(前言:我对 C/C++ 还很陌生,我真的不知道 native 代码中的调试实际上是如何工作的。) 一些消息来源说 gdb 和 lldb 可以调试 any program compiled to ma
我正在尝试从 Visual Studio 2012 外部调试 T4Scaffolding.Core Nuget 包。我使用的是安装了 Powershell 3.0 的 Powershell ISE,并
如何调试汇编代码?我在 Linux 上使用 gdb。我知道我可以看寄存器。有哪些调试汇编代码的方法? 最佳答案 您当然可以使用 breakpoints就像 C 或任何其他编译语言一样。 This ar
如何在每次通话时打印列表或 haskell 中的内容,例如: funct a list = funct (a + 1) (a : list) print list her
让我用我对 Makefiles 或 make 知之甚少的评论作为这个问题的前缀。 有一个非常大的项目,每晚自动构建。它以 Debug 和 Release 模式构建,Debug 用于 Valgrind
我正在创建一个计算每周工资的程序,那么任何加类工资都是该周正常工资的 1.5 倍。我的代码如下: #include int main() { double payrate; double h
我使用的是 Visual Studio 2010 Express Developer 版本。开发网站。我在我的 .aspx 页面中使用 JavaScript。 如何在 Javascript 中放置断点
我最近开始修补 Project Euler 问题,并尝试用 Javascript 解决它们。这样做我往往会产生许多无限循环,现在我想知道是否有比终止 Firefox 或 Chrome 中的选项卡更好的
有没有办法在程序执行期间生成一个交互式 python 控制台(最好是 iPython)而不暂停主程序并且能够检查和修改程序变量?类似于浏览器为 JavaScript 提供的功能。 我知道 pdb.se
我正在使用 FFmpeg @ Android 并希望能够进入 FFmpeg 代码(Eclipse + Seqouya),同时编译 FFmpeg 我使用 --disable-stripping --en
我从使用互操作调用 win32 api 函数的 .net 进程中得到一个异常。 我有一个调试器,我想查看 LastError 的值。 是否可以从 Visual Studio 调试器中查看 LastEr
我正在尝试通过 VBA 创建一个宏,以在 IE 的多个选项卡中打开一组指定的链接。目前我正在使用下面的代码,如果我试图打开 3 个或更少的选项卡,它大部分时间都可以工作。任何超过 3 的代码都会在“N
好的,这似乎是一个愚蠢的问题,因为 MonoDevelop 越来越成熟,所以我确定我只是想念它,但我环顾四周,所有关于这个主题的问题似乎都是关于远程调试或 Mac 上的调试。 我使用的是 Ubuntu
如何调试 Rscripts是从命令行运行的? 我目前正在使用 getopt传递命令行选项的包,当有错误时,我很难: 看看到底出了什么问题; 在 R 中交互式调试(因为脚本需要命令行选项。) 有没有人有
支持 PDF 和网络上的信息很少。我碰巧在博客中看到一篇文章,提到 $.write() 或 $.writeln() 将向 javascript 控制台写入一个字符串。相当有用。有谁知道这个 $ 对象是
PyCharm 1.5 中是否可以使用 Firefox 和 Chrome 支持的 JavaScript 调试? 如果是这样,它能否与 Python/Django 调试器一起有效运行? 如果没有,有没有
我确定这以前发生在人们身上,某些东西在 Debug模式下工作,你在发布时编译,但有些东西坏了。 这发生在我在嵌入式 XP 环境中工作时,我发现最好的方法确实是编写一个日志文件来确定它会出错的地方。 您
我目前正在为即将到来的项目评估 Flow3。 AOP 模式和依赖注入(inject)将非常适合我们的目的。 现在我想不通的是如何在 Controller Action 中调试一些结果。 public
最初,我有一个包含测试服务器的 Django 应用程序。要调试此设置,我只需添加 import pdb; pdb.set_trace()代码中的任何位置,并且有一个断点将我扔到终端中的交互式调试器中(
我是一名优秀的程序员,十分优秀!