Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在运行时获取C代码中的源代码行号?_C_Runtime Error_Line Numbers - Fatal编程技术网

有没有办法在运行时获取C代码中的源代码行号?

有没有办法在运行时获取C代码中的源代码行号?,c,runtime-error,line-numbers,C,Runtime Error,Line Numbers,有没有办法在运行时获取C代码中的源代码行号? 它背后的思想是,假设一个软件是用纯C语言制作的。.exe文件分发给对C一无所知的用户。现在,如果有任何错误,用户可以查看行号并将错误报告给制造商,以便在制造商现场进行调试。我只是想调试运行时错误,并在运行源代码时获得相应的行号。我是这些东西的初学者。如果您使用的是GCC编译器,您可以使用标准预定义宏-\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

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

如果您使用的是GCC编译器,您可以使用标准预定义宏-
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

编译器将在编译时填写行号

例如:-


printf(“%d”行)

您可以使用内置的宏
\uuuuu LINE\uuuu
\uuuu FILE\uuuu
,它们总是扩展到当前文件名和行号

#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;
}
#包括
int main(int argc,char*argv[])
{

如果(argc使用gdb代替。但我想它会起作用:

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

使用调试符号编译并在gdb这样的调试器中运行代码还不够好吗?这是一个dup,可以回答您的特定问题。但正如第一条评论所指出的,更好的调试方法是使用调试器。我在运行时询问行号。您能解释一下吗?我是编写代码的初学者,请阅读duplica的链接问题。它解释了。你读了吗?问题现在被编辑了。以前我认为我无法正确解释
\uuuuuuuuuuuuuu
宏不是特定于GCC的。
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。