我正在使用 KDevelop 进行 C++ 开发和调试。看起来我在某处取消引用 NULL 指针,因为我得到:
*** Program received signal SIGSEGV (Segmentation fault) ***
我怎样才能知道它发生在哪里?我希望 KDevelop 打破这些信号和未处理的异常。
您必须在调试器中运行应用程序。如果您已经有正确的启动配置,请按 KDevelop 中的调试按钮。
在 KDevelop 中,这将打开调试区域视图并在 GDB 中运行应用程序。崩溃后,按底部栏上的Frame Stack工具视图。
你去吧。
与 Python 等解释性语言以及不允许显式内存管理和使用自动垃圾收集的语言(如 Java 和 C#)不同,您所要求的对于使用任何编辑器的 C++ 来说基本上是不可能的。这样做的原因是当一个指针被创建时,它只是一个指向内存地址的指针。在实际尝试通过指针访问内存之前,不可能检查指向地址处的内存是否已正确分配并且是否可访问。一般来说,错误主要分为三类:
1)语法(这些也是下面第二个的子类)
2)编译时间
3)运行时间。
在第一种情况下,大多数现代 IDE 甚至在您尝试编译之前就能够捕捉到错误。这些是由不正确的语法引起的错误。
在第二种情况下,可以在编译时捕获这些错误(这些错误通常也是由不正确的语法引起的,但不仅如此;例如,访问超出范围的静态数组会产生此错误)。
在第三种情况下,这些是只能在程序运行时捕获的错误。您要问的是 C++ 中的这种类型。
因此,最好的办法是在调试模式下运行程序。KDevelop 附带的调试器是一个非常强大的调试器。您将能够明确跟踪内存分配/删除。有关更多信息,请参见此处:http ://userbase.kde.org/KDevelop4/Manual/Debugging_programs