【问题标题】:How to use Valgrind with Qt Creator to debug a remote application?如何使用 Valgrind 和 Qt Creator 调试远程应用程序?
【发布时间】:2018-08-15 21:52:23
【问题描述】:

我有一个在 Qt Creator 中开发的 c++ 应用程序(Qt Creator 4.7.0,Qt 版本 5.2.1)。该应用程序在 beaglebone (debian) 上运行。我正在使用 Qt Creator 的远程调试来调试应用程序。

该应用程序存在一些内存问题,因此我正在尝试使用 Valgrind 来诊断它们。每当我从 Qt Creator 开始 Memcheck 分析时,它的输出都是:

16:22:58: /usr/local/bin/valgrind --child-silent-after-fork=yes --xml-socket=10.0.2.15:38409 --log-socket=10.0.2.15:43999 --xml=yes --smc-check=all --tool=memcheck --gen-suppressions=all --track-origins=yes --leak-check=full --num-callers=25 --vgdb=yes --vgdb-error=0 /home/debian/MyApp

==28159== 无法连接到日志服务器“10.0.2.15:37567”。

==28159== 日志消息将被发送到标准错误。

==28159== 无法连接到 XML 日志记录服务器“10.0.2.15:39405”。

==28159== XML 输出将被发送到 stderr。

valgrind: m_libcprint.c:384 (prepare_sink_socket): Assertion 'sink->fd == 2' 失败。

16:27:13:分析完成。

为了解决前两个错误,我想更改对 valgrind 的调用,以将日志记录写入文件。但是,我找不到在哪里更改 Qt Creator 对 valgrind 的调用。 Tools->Options->Analyzer->Valgrind 似乎不允许我更改日志记录行为。

我不知道是什么导致了最后一个错误。 Qt 文档让我觉得我应该做的就是按下 go 并且它应该可以工作。

感谢任何帮助!

【问题讨论】:

  • 你能从 beaglebone 命令行为 /bin/ls 运行 valgrind 吗?
  • 至于断言,请检查源代码,最好将 github(或其他任何内容)链接添加到问题中的行。为什么 fd 需要为 2?它可能与其他错误有关。
  • 哦,我猜 10.0.2.15 是你的电脑?你确定没有防火墙什么的?您可以使用 netcat/telnet 进行测试。
  • @hyde valgrind 通过 ssh 从 beaglebone 正常工作,但是当我在 beaglebone 上使用它时,我不会尝试重定向日志输出。我偷偷怀疑它在 Qt 中失败是因为它尝试记录的方式,但我不知道在哪里更改它。是的 10.0.2.15 是我的 PC,它是一个 ubuntu 虚拟机
  • @hyde 至于断言,我最好的猜测是,如果我在 valgrind 中指定了 --log-fd=2打电话,但我真的不知道。我不知道为什么它需要为 2,我想我会查看 valgrind 源代码

标签: c++ qt valgrind


【解决方案1】:

删除选项 xml-socketlog-socketxml=yes 对我有用。它删除了警告并解决了断言。

【讨论】:

  • 你是如何删除 QtCreator 的这些选项的?
  • 我想我是从命令行运行 valgrind,而不是从 QtCreator 中运行的。
猜你喜欢
  • 2013-08-22
  • 2014-10-29
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 2013-07-14
  • 2010-12-29
相关资源
最近更新 更多