【发布时间】:2020-05-11 13:30:35
【问题描述】:
我使用 Valgrind 从一开始就运行程序来检测问题。 现在我在程序中的某个特定时刻遇到了内存/性能问题。不幸的是,没有可行的方法可以从一开始就通往这个地方。
有没有办法在 c++ 程序 ( Valgrind/Callgrind ) 中途执行时检测它,比如附加到进程?
已经在这里回答了: How use callgrind to profiling only a certain period of program execution?
【问题讨论】:
-
即使有可能,通常也很难使用内存调试器,除非它们在问题点有完整的上下文。在运行程序的过程中要求报告会导致很多误报和漏报。复制您遇到的问题有多复杂?正常需要多长时间?即使这是一个漫长而复杂的设置,希望您只需执行两次(一次获取信息,一次验证修复)。花一两天时间来查找、修复和验证问题可能是值得的。
-
你的意思是一个完全检测的版本需要太多时间才能到达中间?
-
@CrouchingKitten 完全是 :( 检测版本超级慢 + 我对可能在该位置之前弹出的其他缺陷不感兴趣:[
-
是由多个模块组成的吗?我不确定这是否会加快速度,但您可以尝试仅在您感兴趣的模块上使用
-g编译器参数。