0

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

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

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

4

2 回答 2

1

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

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

你去吧。

于 2013-02-12T01:29:59.327 回答
1

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

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

2)编译时间

3)运行时间

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

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

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

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

于 2013-04-25T23:08:15.823 回答