编译器运行时错误报告和错误位置
Compiler run-time error reporting with location of error
我正在用c++ (Ubuntu 12.04)编写一个编译器。gcc)。到目前为止,具有相当精确的行数和列数的累积错误/警告报告错误/警告位置工作得很好。
我的项目目标包括简单地学习如何做到这一点,所以我添加了一个预处理阶段(在第一步只做最小的事情,如字符串连接,注释删除等),创建一个结果tmp文件。此时不需要这样做,因为我可以在解析时在词法分析器中连接字符串,而且词法分析器已经很好地处理了注释,但是我想了解如何尽可能高效地处理它。
编译时的错误并不难:
(1)错误检查(->报告编译时错误)
(2)如果没有错误,预处理-> TMP文件
(3)在TMP文件上运行解析器等(这是编译时无错误的)
然而,我也报告运行时错误与行号(例如,对于数组越界检查与整数表达式边界的数组)。当只解析tmp文件时,错误检查将被添加到我的IR的字节码中,并且该文件可能与源文件有很大的不同(特别是如果我们开始允许粘贴头文件),那么您究竟如何合理地报告有用的错误位置?是否有一个标准的技巧,比如gcc如何处理这个问题?提到的绑定支票类型当然不会发生在C;但是运行时错误报告适用于,比如说,c++中层次结构中指针的动态解析,并且gcc可以很好地获取行号。
你可以在你的预处理器生成的临时文件中记录行号信息,比如cpp
的line Control。
C预处理器通知C编译器源代码中每个标记的来源位置。目前,这只是文件名和行号。
相关文章:
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 奇怪的Arduino C++编译错误取决于文件位置
- 我收到分段错误,但不了解分段错误发生的位置
- 访问特定阵列位置/索引时出现分段错误
- boost::p rogram_options 在指定意外的位置参数时不报告任何错误
- 快速排序;分段错误,但找不到位置?
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- 错误 在测试.exe 0x76C9FD62时出现未经处理的异常:Microsoft C++异常:内存位置0x006FF8
- 错误:内存位置的 std::length_error
- 处于默认参数位置的 Lambda 无法访问好友成员。这是编译器错误吗?
- 无法指出发生分段错误的位置
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 目标提升::<library>已经有导入的位置 + 链接错误
- 如何使用 Poco Json 解析器确定输入文档中错误的位置?
- 在动态加载的位置无关的可执行文件中分离错误
- Visual studio显示SEH异常的错误位置
- 编译器运行时错误报告和错误位置
- 核心转储,但是找不到错误位置,有GDB的错误信息
- 如何使用精灵解析器获得错误位置