我想使用valgrind来分析我的代码。问题是,我有一个我不感兴趣的巨大启动序列。
我在valgrind/callgrind.h中找到了应该对我有帮助的定义:
According to this article I have to execute valgrind with the following options:
valgrind --tool=callgrind --instr-atstart=no ./application
When I do this two files are created:
I then want to use kcachegrind to visualize my results. This works great but the makros for the skipping of my startup-sequence seem to do nothing. What do I have to do to measure the performance only in places where I want to?
我想写一个通用的模板方法来计算一些东西,最后返回一个值typename T.该值来自QString,因此我需要将QString转换为指定的值typename T.不幸的是我只找到了toDouble(),toInt()......的方法.
我需要的是:
QString s = 3.1415;
double d = s.toType<double>();
float f = s.toType<float>();
int i = s.toType<int>();
Run Code Online (Sandbox Code Playgroud)
我不想叫toDouble(),toInt()......因为我不能在编译时选择它们.
谢谢!
编辑:我可以编写我自己的专用模板函数来完成这个.所以
double myOwnConvertFunction<double>(const QString& s)
Run Code Online (Sandbox Code Playgroud)
然后只需调用s.toDouble()
我认为Qt可能已经有了内置方式吗?
这个问题被多次以类似的方式提出,例如在stackoverflow或forum.qt.io或qtcentre.org。问题是这个错误消息非常模糊,以至于一种解决方案无法应用于另一种场景。不过,大多数线程都在讨论中死掉了:-(
所以我在 Qt 应用程序中收到的完整错误消息是:
找不到“OneOfMyClasses”
值的虚拟表的链接器符号,而是找到“QString::shared_null”
OneOfMyClasses根据各种情况而变化,QString::shared_null对于我收到的所有错误保持不变。这是我的日志控制台的屏幕截图:
它发生的点是在当前位置之前的源代码行中的该函数中(黄色箭头):
因此,根据我进入的消息m_pStateWidget->insertNavLabel(...),错误消息打印在与 QString 类相关的 Qt 内的构造函数中的某个位置。所以我尝试了以下方法,将问题从该代码位置移开:
执行此操作时,我在下面的几行代码中收到相同的错误消息,消息中包含另一个类名,请注意 QString ::shared_null保持不变。
在我看来,我的记忆有某种损坏。
感谢您的任何提示或帮助!:-)
编辑:现在变得非常有趣。在打印消息之前我已经进入了每个函数,最终得到了这些错误消息:
在这个位置:
当我在 QtCreator 中浏览调用堆栈时,每次我在堆栈中选择另一个函数时,都会一次又一次地打印错误。
我有一个名为work_in_progress的分支,用于调试和测试具有许多小提交的代码.所有这些都有冗余的提交消息.当我完成时,我想将壁球合并到主分支.通常,这是使用--squash参数进行合并时的单个命令.
但是我如何使用SmartGIT做到这一点?
这里的文档如何执行squash合并似乎是错误的,因为没有选项"分支由选定的提交及其祖先组成".
此处的文档如何执行常规合并和压缩合并根本不起作用.我试过了,我仍然看到日志中的所有小提交.我之后可以删除work_in_progress分支,一切都很好,但是我希望在主分支的历史记录中使用单个提交消息进行单个提交.
编辑:这是我的提交对话框中的屏幕截图.我想我错过了"简单提交"选项?!也许我不明白说明^^

编辑2:这是日志的屏幕截图.顶部的第二次提交是使用SmartGIT完成的.您可以看到所有中间提交(包括消息)在历史记录中都可见.该分支称为XYZ_work_in_progress.最后(最顶层)提交是使用"git merge --squash ABC_work_in_progress"完成的,但所有提交都被吞下,因此它是一个干净的历史记录.来自分支的所有工作都会累积到一个提交中,并带有一条消息:-)
