【问题标题】:CPPUTest debugging - C++CPPUTest 调试 - C++
【发布时间】:2011-11-08 21:21:20
【问题描述】:

我正在学习 TDD 并在 Eclipse 中使用 CppUTest。 有什么方法可以调试我的代码得到一个烦人的分段错误。

谢谢

【问题讨论】:

    标签: c++ tdd cpputest


    【解决方案1】:

    我不知道 CppUTest 或 Eclipse 有什么特别的东西可以帮助你,但这里有一些通用的段错误调试想法似乎很合适:

    • flushing 打印语句(例如 printf(...) + fflush(stdout) 或 fprintf(stderr, ...))添加到您的代码中,然后查看打印的内容。以二进制搜索方式执行此操作,一次只打印几张照片,直到您缩小确切崩溃的位置。这听起来很老套,但非常有效。这是我在谷歌上找到的关于这种众所周知的技术的指南:http://www.floccinaucinihilipilification.net/blog/2011/3/24/debugging-via-binary-search.html

    • 使用调试符号编译代码并在调试器中运行。当你遇到段错误时,请求回溯,看看你是否能弄清楚发生了什么。这样做时,使用graphical debugger 会特别有帮助。

    • 使用调试工具(如 debug malloc library 或来自 valgrind 套件的工具)运行您的代码。这可能会捕获作为段错误的根本原因但并未在生成段错误的确切位置发生的问题(例如,双重释放、超出范围的数组访问、稍后使用的破坏指针等)。

    【讨论】:

    • 感谢您的信息。我用 gdb 做了一些调试,对设置调试环境不是很熟悉。第二点和第三点是他们的任何参考或一些有助于我设置的链接。
    • 我添加了一些可能对您有所帮助的链接。 (它们都不是 Eclipse 特定的,因为我不是 Eclipse 的重度用户,但这些通用技术可以在任何地方使用。)
    【解决方案2】:

    如果您可以在您的问题中添加一些代码,以便我们更好地了解您所面临的问题,那将会很有帮助。不知道任何细节,我会建议以下:

    1. 在“调试”对话框中将-v 添加到可执行文件的参数中。这将在执行测试用例时打印它们的名称。打印的姓氏可能是发生分段错误的测试。
    2. 在该测试用例中放置一个断点,您可以在该测试用例中调用您的代码
    3. 进入您的代码,直到出现段错误。
    4. 追溯导致段错误的值(最常见的是悬空指针)并找出它为什么为 NULL 或未初始化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2013-02-21
      • 2011-07-27
      相关资源
      最近更新 更多