【问题标题】:How can I see where do I reference a null pointer using KDevelop?如何使用 KDevelop 查看在哪里引用空指针?
【发布时间】:2013-02-11 17:39:27
【问题描述】:

我正在使用 KDevelop 进行 C++ 开发和调试。看起来我在某处取消引用 NULL 指针,因为我得到:

*** Program received signal SIGSEGV (Segmentation fault) ***

我怎样才能知道它发生在哪里?我希望 KDevelop 打破这些信号和未处理的异常。

【问题讨论】:

  • 不知道你在Kdevelop 中是如何做到的——通常这只是“在调试器中运行”的一种情况。如果没有别的,你总是可以在命令行的 GDB 中运行它——只要确保它是用调试符号编译的。当崩溃停止时输入“where”,它会显示你是如何到达那里的堆栈跟踪。 [顺便说一句,除了 NULL 指针之外,可能是各种其他错误访问]。
  • @MatsPetersson,我在调试器中运行它,它甚至似乎停止在信号处。我不知道它停在哪里...
  • 再次,不确定如何使用 KDevelop - 是否有一个“堆栈”窗口或类似的东西,您需要启用/带到前面/视图(无论它可能被称为什么,但它已经完成)。

标签: c++ kdevelop kdevelop4


【解决方案1】:

您必须在调试器中运行应用程序。在 KDevelop 中按 Debug 按钮,以防您已经有了正确的启动配置。

在 KDevelop 中,这将打开 Debug 区域视图并在 GDB 中运行应用程序。 崩溃后,按下底部栏的Frame Stack工具视图。

你去。

【讨论】:

    【解决方案2】:

    与 Python 等解释型语言以及 Java 和 C# 等不允许显式内存管理和使用自动垃圾回收的语言不同,对于带有任何编辑器的 C++,您的要求基本上是不可能的。这样做的原因是,当创建一个指针时,它就是一个指向内存地址的指针。在实际尝试通过指针访问内存之前,不可能检查指向地址处的内存是否已正确分配并且是否可访问。一般来说,错误主要分为三类:

    1) 语法(这些也是下面第二个的子类)

    2) 编译时间

    3) 运行时间

    在第一种情况下,大多数现代 IDE 甚至在您尝试编译之前就能够捕捉到错误。这些是由不正确的语法引起的错误。

    在第二种情况下,这些错误可以在编译时被捕获(这些错误通常也是由不正确的语法引起的,但不仅如此;例如,访问超出范围的静态数组会产生此错误)。

    在第三种情况下,这些是只能在程序运行时捕获的错误。您要问的是 C++ 中的这种类型。

    因此,最好的办法是在调试模式下运行程序。 KDevelop 附带的调试器是一个非常强大的调试器。您将能够明确跟踪内存分配/删除。欲了解更多信息,请参阅此处:http://userbase.kde.org/KDevelop4/Manual/Debugging_programs

    【讨论】:

      猜你喜欢
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2023-03-26
      • 2020-11-02
      • 2016-01-06
      • 2019-08-03
      • 2014-05-04
      相关资源
      最近更新 更多