【问题标题】:Is there any way to get the source code line number in C code in run time? [duplicate]有没有办法在运行时获取 C 代码中的源代码行号? [复制]
【发布时间】:2017-06-16 09:15:17
【问题描述】:

有没有办法在运行时获取 C 代码中的源代码行号? 它背后的想法是,假设一个软件是用纯 C 语言制作的。 .exe文件分发给对C一无所知的用户。现在如果有任何错误,用户可以看到行号并将错误报告给制造商,以便可以在制造商现场进行调试。我只是在运行时调试运行时错误并在源代码中获取相应的行号。我是这些东西的初学者。

【问题讨论】:

  • 用调试符号编译并在像gdb这样的调试器中运行代码还不够好吗?
  • 这是一个回答您的具体问题的副本。但正如第一条评论所指出的,更好的调试方法是使用调试器。
  • 我在运行时询问行号。你能解释一下吗?我是编码初学者
  • 阅读重复问题的链接。它解释了这一点。你读了吗?
  • 问题现在已编辑.. 以前我想我无法正确解释它

标签: c runtime-error line-numbers


【解决方案1】:

如果您使用的是 GCC 编译器,则可以使用标准预定义宏 - __LINE__ 作为行号占位符。

编译器会在编译时填写行号。

例如:-

printf("%d",__LINE__);

【讨论】:

  • __LINE__ 宏并非特定于 GCC。
【解决方案2】:

改用 gdb。但我想它会起作用的:

  if(someThingsWrong())
    printf("wrong at line number %d in file %s\n", __LINE__, __FILE__);

【讨论】:

    【解决方案3】:

    您可以使用内置宏 __LINE____FILE__,它们始终扩展为当前文件名和行号。

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        if(argc<2)
        {
            printf("Error: invalid arguments (%s:%d)\n", __FILE__, __LINE__);
            return 0;
        }
        printf("You said: %s\n", argv[1]);
        return 0;
    }
    

    【讨论】:

    • __FILE____LINE__ 以及其他一些宏实际上是强制性宏。见 C11 §6.10.8.1 1.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2020-12-07
    • 1970-01-01
    • 2023-04-09
    • 2023-04-11
    相关资源
    最近更新 更多