【发布时间】:2020-03-06 15:14:01
【问题描述】:
我正在开发一个高性能代码库,该代码库由于容器调整大小而遇到一些性能问题。随着时间的推移检查吞吐量或延迟显示了一种模式,其中呈指数增长的延迟峰值与呈指数增长的时间段分开,这表明容器的大小会随着容量的增加而翻倍。
我很难通过手动搜索代码来跟踪哪个容器正在增长,并且希望使用 gdb 跟踪容器预留。
是否可以设置一个断点(或多个断点),以便在容器保留更多空间时 gdb 将停止执行?我不确定容器是矢量、地图还是集合,所以如果这三个容器都依赖于相同的底层调用来调整大小,那可能是最好的。否则,我很乐意设置多个断点。
【问题讨论】:
-
如果没有其他动态分配,可以在
operator new上设置断点。但如果有许多其他与这个问题无关的动态分配,它可能太嘈杂了。 -
最好的办法是在您知道代码要调整大小时(例如,第一次添加元素时)单步执行代码,当您到达调整大小的代码时添加断点