【问题标题】:Detecting a segmention fault in C检测 C 中的分段错误
【发布时间】:2015-02-27 10:48:17
【问题描述】:

我有 Win7 Pro(32 位)和 CodeBlocks IDE。 我想知道有什么方法可以检测 C 中存在分段错误的行。我的代码是 PRIME1.c 我在 Stack Overflow 上的某个地方发现这在终端中的 linux 上是可能的,但我想在 Windows 中这样做。 谁能告诉我该怎么做? 非常感谢!

换句话说,我想知道如何在 windows 7 中从 cmd 使用调试器,以及它如何告诉我哪一行有问题。

我刚刚找到这个链接 Determine the line of C code that causes a segmentation fault? 但是,如您所见,这是针对 Linux 的。 我想知道如何在 Windows cmd 中做到这一点?

【问题讨论】:

  • 什么?你的意思是没有调试器?
  • 我不知道怎么做,也许在 cmd 和 gcc 中,但我不知道 cmd 技巧,这就是我问问题的方式
  • 一些错误可以直接从代码中推断出来,否则你需要一个调试器。这就是调试器的用途!
  • 在调试模式下构建应用程序(带有调试器支持)并让 ide 指出罪魁祸首。
  • 要在没有调试器的情况下做到这一点:到处添加一堆 printfs,并查看在崩溃之前打印的最后一个。

标签: c windows error-handling


【解决方案1】:

您可以捕获段错误。但是,不幸的是,无论如何都无法处理此事件或获取有关该故障的任何信息(以标准方式,有特定于编译器的解决方法)。因此,也许可以将 printf 放在带有 __LINE__ 宏的每一行中,然后等到它失败。

#include <signal.h>
#include <conio.h>
#include <stdio.h>

void listener(int sig) {
    printf("listener: access violation");
    _getch();
}

void main() {
    char a = 10;
    char *p = &a;

    signal(SIGSEGV, listener);

    do {
        printf("%d", *p++);
    } while (1);

    _getch();
}

【讨论】:

  • 如果signal() 导致段错误怎么办? :)
猜你喜欢
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多