在运行时获取C代码中源代码行号的方法是否存在?

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

仅仅使用带有调试符号的编译器并在像gdb这样的调试器中运行代码不够好吗? - ad absurdum
那是一个重复的回答,解决了你具体的问题。但正如第一条评论所指出的,更好的调试方式是使用调试器。 - kaylum
我在运行时询问行号。你能解释一下吗?我是一个编程的初学者。 - Debasmita Bhoumik
请阅读重复问题的链接。它会解释清楚的。你看过了吗? - kaylum
问题已经被编辑了。之前我觉得自己没有解释清楚。 - Debasmita Bhoumik
无论如何,你的程序要么会打印一个错误消息(其中可能包含行号,如链接答案所述),要么程序崩溃,这时你可以让它转储核心文件以便发送给你进行分析。 - kaylum
3个回答

4
如果你使用GCC编译器,你可以使用标准预定义宏——__LINE__作为行号占位符。
编译器将在编译时填写行号。
例如: printf("%d",__LINE__);

1
__LINE__宏不仅适用于GCC。 - Govind Parmar

2
请使用gdb代替。但我猜它会起作用。
  if(someThingsWrong())
    printf("wrong at line number %d in file %s\n", __LINE__, __FILE__);

2
您可以使用内置的宏__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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接