- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Valgrind 检查我编写的 C 应用程序中的泄漏。
我正在使用第 3 方库...但我不能 100% 确定问题是否真的只出在它们身上。如果我通过我的代码运行 10 条消息,我会在 Linux 上得到以下信息:
==12460== LEAK SUMMARY:
==12460== definitely lost: 70,794 bytes in 11 blocks
==12460== indirectly lost: 0 bytes in 0 blocks
==12460== possibly lost: 69,960 bytes in 19 blocks
==12460== still reachable: 52,095 bytes in 33 blocks
==12460== suppressed: 0 bytes in 0 blocks
如果我通过我的代码运行 100 条消息,我会得到:
==12811== LEAK SUMMARY:
==12811== definitely lost: 70,794 bytes in 11 blocks
==12811== indirectly lost: 0 bytes in 0 blocks
==12811== possibly lost: 69,960 bytes in 19 blocks
==12811== still reachable: 61,795 bytes in 133 blocks
==12811== suppressed: 0 bytes in 0 blocks
所以你可以看到“仍然可达”是唯一真正增长的地方...这是否与以下事实有关:当我将此代码带到 Solaris 时,我在 PRSTAT 下看到了 SIZE 字段一段时间后成长?我认为“仍然可以访问”仍然是“某种内存泄漏”?
我的 Valgrind 日志中“仍然可以访问”的示例如下:
==12811== 848 bytes in 1 blocks are still reachable in loss record 34 of 48
==12811== at 0x4A067BA: malloc (vg_replace_malloc.c:263)
==12811== by 0x656F1A7: xppInitialize (in /opt/mqm/lib64/libmqmcs.so)
==12811== by 0x6538802: InitProcessInitialisation (in /opt/mqm/lib64/libmqmcs.so)
==12811== by 0x653A3D4: xcsInitializeEx (in /opt/mqm/lib64/libmqmcs.so)
==12811== by 0x653AF94: xcsInitialize (in /opt/mqm/lib64/libmqmcs.so)
==12811== by 0x6250BAC: zstMQCONNX (in /opt/mqm/lib64/libmqz.so)
==12811== by 0x60B1605: MQCONNX (in /opt/mqm/lib64/libmqm.so)
==12811== by 0x585CEBA: wmq_receiver_initialize (wmq_receiver.c:18)
==12811== by 0x4E10D58: wmq_receiver_proxy_initialize (wmq_receiver_proxy.c:17)
==12811== by 0x402D02: initialiseWMQReceiverProxy (test_outbound.c:296)
==12811== by 0x4027E8: outboundThreadMainLoop (test_outbound.c:209)
==12811== by 0x37EA2077E0: start_thread (in /lib64/libpthread-2.12.so)
但上面是在第 3 方 IBM 库中?但我不敢相信 IBM(对于 Websphere MQ)会在他们的库中出现泄漏,因为它已经使用了很多年......我会在这里遗漏什么吗?
有什么方法可以更好地追踪并修复这些“仍可访问”的漏洞?我想我说得对,这很可能是我在移植应用程序后在 Solaris 上看到内存逐渐增长的原因......
感谢您的帮助;-)
林顿
最佳答案
“仍然可达”通常意味着代码有一些静态(或线程本地)指针变量,它是用 malloc
& Co 初始化的。这部分在第三方库中增长可能是一个表明该库确实会不时扩展其缓冲区以应对不断增长的请求。但是由于似乎没有额外的“最终丢失”,它似乎很好地做到了这一点,例如通过使用 realloc
。
在你的情况下,你必须看看当你对图书馆施加压力时,这是否会进一步增加。最后你可以为那个库写一个“抑制”文件,所以 valgrind 会忽略这些。在现代 Linux 发行版上,您已经拥有一些标准库,例如
根据我个人的喜好,明确和可能丢失的部分会让我更担心,我会先清理它们。如果 valgrind 设法为您的应用程序的 every malloc
捕获 free
,您只能确定根本没有泄漏。
关于c - "still reachable"VALGRIND 内存泄漏 (Linux) 是否与 SOLARIS 上的 PRSTAT 内存增长有关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8366172/
我在开发 iPhone 应用程序时遇到了一次非常奇怪的崩溃。似乎每次我向 friend 展示我的应用程序时它都会崩溃,但否则它永远不会崩溃。在对墨菲定律感到困惑之后,我确定了事故的模式——纽约地铁。使
我正在创建一个 iPhone 应用程序,我正在使用 RestKit api 连接到服务器。每当我将 Reachability.m 和 Reachability.h 添加到项目的第二个 UIViewCo
我使用了Andrew's修改后的Reachability类。 -(void)viewDidLoad [[NSNotificationCenter defaultCenter] postNotifica
我正在使用更新的 Reachability库来测试互联网连接是否可达。我尝试记录一条消息以防无法访问互联网,但日志不调试: //Test the internet connection Reachab
我使用 Reachability 检查我的应用程序的网络状态,除了在 iOS 9.0.1 或更高版本中 reachableBlock 和 unreachableBlock 被调用两次外,一切正常,这给
我需要在我的 iPhone 项目中测试网络可达性。使用哪个项目更好? Reachability与 UIDevice-Reachability 最佳答案 可达性(如果您唯一的问题是测试网络可达性)。这是
我看到论坛上有很多关于Apple的Reachability Class的条目,但我还没有看到这个的解决方案。 我正在开发一个 VoIP 应用程序,需要在后台模式下实时检测连接变化。 SCNetwork
使用 Reachability Class(来自 Apple)来检查远程主机的可用性是否明智?例如,www.google.com 或者我应该使用 NSString *connectedString =
我试图将使用 rebar 构建的 REST API 示例转换为 rebar3 版本( http://jordenlowe.com/title/Explain_like_I_am_5_-_Erlang_
我正在尝试将 Reachability.swift 更新到 swift 3.0,但在将 Reachability 实例传递给回调函数时遇到问题。 这是我的片段:* 请注意 self = 可达性等级 v
我在代码中使用了 Apple 的可达性类。下面是appdelegate的代码 NSNotificationCenter.defaultCenter().addObserver(self
有时我必须检查互联网连接并为此使用“可达性”。 最好使用“可达性”手动检查互联网连接,例如: BOOL status = ([[Reachability reachabilityForInternet
我在这个应用程序的几个 View 中使用了 AFNetworking Reachability。一种观点认为,存在奇怪的问题。在每个 View 中,我都在 loadView 中开始监控:[[AFNet
在 CI 系统中,我使用 valgrind 运行一堆测试,如果 valgrind 没有发现错误,我期望返回值 0,否则返回 1。测试本身成功运行并返回 0。 这就是 error-exitcode 的用
我想在我的应用程序中使用 ReachabilitySwift 类。我在我的 podFile 中添加了依赖项,我从 github 获取了代码. 我遇到了这个错误: 不能在这一行调用不带参数的 'Reac
我正在尝试在我的应用中实现可达性。我在 applicationDidFinishLaunching 中有它。如果我的连接真的很糟糕并且我启动了应用程序,Reachability 会一直持续并且经常使应
我正在使用 Apple 提供的可达性示例代码来检查网络连接并获得更改通知 (Reachability Sample code)。 我查看了我的应用程序的一些崩溃锁。似乎有些崩溃是由于 Reachabi
Apple 名为 Reachability 的示例应用展示了如何检测连接。如果您只有 wifi 而没有互联网,该应用会在下面的第二行停顿一分钟以上: SCNetworkReachabilityFlag
我目前正在使用此检查 viewDidLoad 上的网络连接: -(BOOL)reachable { ReachabilityDRC *r = [ReachabilityDRC reachabi
使用 Reachability 比下面的代码有什么优势?我觉得 Reachability 的代码量很大,但如果它在任何方面都更好,那么我会改用它。 NSString *connectionString
我是一名优秀的程序员,十分优秀!