【问题标题】:Profile GDB python pretty printers for Qt5为 Qt5 配置 GDB python 漂亮打印机
【发布时间】:2017-05-11 09:52:37
【问题描述】:

我正在尝试使用 GDB python API 改进我自己的 GDB 漂亮打印机。

目前我正在用核心测试它们。

我正在尝试获取一些 QMap、QList 内容的信息,但它们包含的元素太多,以至于用它的内容打印它们真的很慢(几分钟)。

所以,我想知道是否有任何已知的方法来分析哪些部分较慢。

我已经检查过Python profile manualgoogle-perftools,但是我不知道如何在GDB执行周期中使用它们。

gdbcommands.txt:

source /home/user/codigo/git/kde-dev-scripts/gdb/load-qt5printers.py
source /home/user/codigo/myownprinters.py
core ../../core.QThread.1493215378
bt
p longQMapofQList

链接到load-qt5-printers.py content

然后我启动 gdb 以自动运行这些命令:

gdb-multiarch --command=~/bin/gdbcommands.txt

【问题讨论】:

    标签: python qt gdb profiling qt5


    【解决方案1】:

    它们有这么多元素,用它的内容打印它们真的很慢(几分钟)。

    Qt 漂亮的打印机是否尊重print-elements 限制?你的限额是不是设得太高了?

    分析在这里不太可能有帮助:如果您要打印一个包含(例如)1000 个元素的列表,GDB 可能需要执行 10,000 个或更多 ptrace 调用,并且~所有时间都花在等待这些调用上.

    您可以在strace -c 下运行gdb 并观察在打印包含10 个元素和100 个元素的列表时执行了多少ptrace

    如果增加是线性的,您可以尝试优化漂亮的打印机以减少访问次数。如果增加是二次方的,漂亮的打印机可能会进行不必要的指针追踪(这当然可以解释为什么打印长列表需要几分钟)。

    【讨论】:

    • 我已禁用打印限制,因为我想将它们全部打印出来。这就是为什么我寻求帮助来分析较慢的部分。而且是核心文件,据我所知,这里没有用到ptrace。谢谢你的回答。
    • @kikeenrique 假设您使用来自cgit.kde.org/kde-dev-scripts.git/tree/gdb 的 QT 漂亮打印机,我可以在 0.13 秒内从核心转储中打印带有 1000 个元素的 QList。您的列表有多大?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多