小编Fro*_*zan的帖子

如何使用 KCachegrind 和 Callgrind 仅测量我的代码的一部分?

我想使用valgrind来分析我的代码。问题是,我有一个我不感兴趣的巨大启动序列。

我在valgrind/callgrind.h中找到了应该对我有帮助的定义:

  • CALLGRIND_START_INSTRUMENTATION
  • CALLGRIND_STOP_INSTRUMENTATION
  • CALLGRIND_DUMP_STATS

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:

  • callgrind.out.16060
  • callgrind.out.16060.1

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?

c++ valgrind callgrind kcachegrind

5
推荐指数
1
解决办法
1064
查看次数

如何使用模板将QString转换为typename?

我想写一个通用的模板方法来计算一些东西,最后返回一个值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可能已经有了内置方式吗?

c++ qt templates

5
推荐指数
1
解决办法
1112
查看次数

Qt 中运行时“找不到虚拟表的链接器符号...”错误的原因是什么?

这个问题被多次以类似的方式提出,例如在stackoverflowforum.qt.ioqtcentre.org。问题是这个错误消息非常模糊,以至于一种解决方案无法应用于另一种场景。不过,大多数线程都在讨论中死掉了:-(

所以我在 Qt 应用程序中收到的完整错误消息是:

找不到“OneOfMyClasses”
值的虚拟表的链接器符号,而是找到“QString::shared_null”

OneOfMyClasses根据各种情况而变化,QString::shared_null对于我收到的所有错误保持不变。这是我的日志控制台的屏幕截图:

在此输入图像描述

  1. 为什么字体颜色是粉红色的,那么谁在打印这条消息呢?
  2. 为什么只有在设置断点并单步执行代码时才会看到此消息?仅运行应用程序时不会出现此消息。

它发生的点是在当前位置之前的源代码行中的该函数中(黄色箭头):

在此输入图像描述

因此,根据我进入的消息m_pStateWidget->insertNavLabel(...),错误消息打印在与 QString 类相关的 Qt 内的构造函数中的某个位置。所以我尝试了以下方法,将问题从该代码位置移开:

在此输入图像描述

执行此操作时,我在下面的几行代码中收到相同的错误消息,消息中包含另一个类名,请注意 QString ::shared_null保持不变。

在我看来,我的记忆有某种损坏。

  1. 我应该如何开始调查这个问题?我害怕更改代码,因为这可能会隐藏如上所述的问题。
  2. QString::shared_null 是怎么回事?我发现其他人经常在错误消息中看到相同的内容。

感谢您的任何提示或帮助!:-)

编辑:现在变得非常有趣。在打印消息之前我已经进入了每个函数,最终得到了这些错误消息:

在此输入图像描述

在这个位置:

在此输入图像描述

当我在 QtCreator 中浏览调用堆栈时,每次我在堆栈中选择另一个函数时,都会一次又一次地打印错误。

  1. 这是否意味着调试器正在打印消息,并且它太愚蠢了,无法为我解决某种 vtable 问题,或者这是否意味着我遇到了严重的问题?

c++ linker qt vtable

5
推荐指数
1
解决办法
5328
查看次数

如何使用SmartGIT在一次提交中将多个提交从分支合并到主服务器?

我有一个名为work_in_progress的分支,用于调试和测试具有许多小提交的代码.所有这些都有冗余的提交消息.当我完成时,我想将壁球合并到分支.通常,这是使用--squash参数进行合并时的单个命令.

但是我如何使用SmartGIT做到这一点

这里的文档如何执行squash合并似乎是错误的,因为没有选项"分支由选定的提交及其祖先组成".

此处的文档如何执行常规合并和压缩合并根本不起作用.我试过了,我仍然看到日志中的所有小提交.我之后可以删除work_in_progress分支,一切都很好,但是我希望在分支的历史记录中使用单个提交消息进行单个提交.


编辑:这是我的提交对话框中的屏幕截图.我想我错过了"简单提交"选项?!也许我不明白说明^^ 在此输入图像描述


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

git merge smartgit git-squash

3
推荐指数
1
解决办法
2687
查看次数

标签 统计

c++ ×3

qt ×2

callgrind ×1

git ×1

git-squash ×1

kcachegrind ×1

linker ×1

merge ×1

smartgit ×1

templates ×1

valgrind ×1

vtable ×1