如何在c程序中查看导致分段错误的源代码行号

时间:2013-11-30 18:35:27

标签: debugging gdb segmentation-fault

我知道我可以通过运行程序查看行号并调用“where”或“bt”来查看当前停止的行。但是这个行号以十六进制形式表示,这意味着它是基于机器的行号。如何从此号码中获取源代码中的行号。例如,当前行号看起来像这样;

(gdb) where
#0  0x0000000000404a9d in ex ()
#1  0x0000000000404b63 in ex ()
#2  0x0000000000404369 in ex_wrap ()
#3  0x0000000000403259 in yyparse ()
#4  0x00000000004042ff in main ()

我想要......

line 55 in the file "foo.c":blablalba

1 个答案:

答案 0 :(得分:0)

  

但此行号以十六进制形式表示,这意味着它是基于机器的行号。

没有“基于机器的行号”这样的东西。数字是一个数字,无论是以十六进制,十进制还是八进制表示。

您看到的十六进制数字根本不是行号;这些是程序计数器的值(也称为机器地址)。

您没有看到文件/行信息的原因是您编译或链接了没有-g标志的代码,或者您(可能不小心)剥离了调试信息(“迷路”{{1}在链接线上是一个常见的原因)。