Debugging gdb打印<;filename.c>;:执行的每个语句的行号

Debugging gdb打印<;filename.c>;:执行的每个语句的行号,debugging,gdb,Debugging,Gdb,我有一个确定性的(停止)程序,没有IO,我想用gdb运行该程序,并让它打印执行的每个c语句:(比如文件名:line num) :27 :29 :14 //等等。 是否有任何合理的方法对此进行检测?我不介意人为的努力,但我不能在每个c文件的每一行中添加断点。 非常感谢您的帮助,谢谢 编辑 似乎进入所有遇到的libc函数都会使输出过于冗长。有没有办法阻止gdb进入像malloc这样的libc函数?谢谢 您可以在无限循环中执行步骤,直到程序结束或按Ctrl+C键为止。每个步骤命令在进入新函数时都会打

我有一个确定性的停止)程序,没有IO,我想用gdb运行该程序,并让它打印执行的每个c语句:(比如文件名:line num)

:27
:29
:14
//等等。
是否有任何合理的方法对此进行检测?我不介意人为的努力,但我不能在每个c文件的每一行中添加断点。 非常感谢您的帮助,谢谢

编辑


似乎进入所有遇到的libc函数都会使输出过于冗长。有没有办法阻止gdb进入像malloc这样的libc函数?谢谢

您可以在无限循环中执行
步骤
,直到程序结束或按Ctrl+C键为止。每个
步骤
命令在进入新函数时都会打印行号和文件名。要在gdb shell中调用循环,请执行以下操作:

(gdb) while 1
 >step
 >end
假设您只对从
main
开始执行的语句感兴趣,您可以将所有命令放入一个文件
gdbCommands.txt

break main
run
while 1
step
end
并使用
gdb-xgdbcommands.txt--args程序arg1 arg2 arg3
执行它

如果要另外跳过特定libc文件中的函数,可以添加:

skip -file /path/to/some/filename
对于命令,如下所示:

set logging on
break main
skip -file exit.c
skip -file malloc.c
skip -file strops.c
skip -file ../sysdeps/x86_64/multiarch/strchr-avx2.S
skip -file ../sysdeps/x86_64/multiarch/strlen-avx2.S
skip -file ../sysdeps/x86_64/multiarch/memchr-avx2.S
skip -file ../sysdeps/x86_64/multiarch/strcmp-sse42.S
skip -file ../sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S
skip -file ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S
skip -file ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S
skip -file ../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S
skip -file ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S
run
while 1
step
end

set logging on
命令会将所有gdb输出重定向到一个名为
gdb.txt
的文件,您可以在以后检查。

您可以在无限循环中执行
步骤
,直到程序结束或按下Ctrl+C。每个
步骤
命令都会在进入新函数时打印行号和文件名。要在gdb shell中调用循环,请执行以下操作:

(gdb) while 1
 >step
 >end
假设您只对从
main
开始执行的语句感兴趣,您可以将所有命令放入一个文件
gdbCommands.txt

break main
run
while 1
step
end
并使用
gdb-xgdbcommands.txt--args程序arg1 arg2 arg3
执行它

如果要另外跳过特定libc文件中的函数,可以添加:

skip -file /path/to/some/filename
对于命令,如下所示:

set logging on
break main
skip -file exit.c
skip -file malloc.c
skip -file strops.c
skip -file ../sysdeps/x86_64/multiarch/strchr-avx2.S
skip -file ../sysdeps/x86_64/multiarch/strlen-avx2.S
skip -file ../sysdeps/x86_64/multiarch/memchr-avx2.S
skip -file ../sysdeps/x86_64/multiarch/strcmp-sse42.S
skip -file ../sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S
skip -file ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S
skip -file ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S
skip -file ../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S
skip -file ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S
run
while 1
step
end

set logging on
命令将所有gdb输出重定向到一个名为
gdb.txt
的文件,您可以稍后检查。

谢谢,但gdb会以“程序未运行”消息进行响应。当我写run时,它说“劣质1(进程12422)正常退出”。您是否可以将答案表述为gdb脚本?类似于:gdb-xgdbcommands.txt--args程序arg1 arg2 arg3…更新了答案。很好,它回答了我的问题。是否有任何方法可以阻止gdb步进到像malloc.c这样的库函数?这太冗长了,否则。。。理想情况下,我想它只步骤到*.c文件我自己的项目。。。不是像malloc.c这样的libc函数。。。有什么办法吗?我应该换一条线吗?谢谢谢谢,但gdb以“程序未运行”消息回应。当我写run时,它说“劣质1(进程12422)正常退出”。您是否可以将答案表述为gdb脚本?类似于:gdb-xgdbcommands.txt--args程序arg1 arg2 arg3…更新了答案。很好,它回答了我的问题。是否有任何方法可以阻止gdb步进到像malloc.c这样的库函数?这太冗长了,否则。。。理想情况下,我想它只步骤到*.c文件我自己的项目。。。不是像malloc.c这样的libc函数。。。有什么办法吗?我应该换一条线吗?谢谢