View 从GDB中查看/打印功能代码

View 从GDB中查看/打印功能代码,view,printing,gdb,View,Printing,Gdb,我正在尝试开发一个简单的基于文本的用户界面,它运行一些gdb命令。 我希望用户能够在代码的特定区域设置和中断/跟踪点,并运行一些调试命令 我想让用户输入需要调试的函数。然后,我取这个函数名并打印出函数的源代码,然后让用户选择要在哪行代码上设置断点/跟踪点。目前,使用反汇编命令,我可以打印出用户的内存地址,但我想打印实际的源代码 这可以在gdb中完成吗 目前: Dump of assembler code for function test_function: 0x03800f70 <

我正在尝试开发一个简单的基于文本的用户界面,它运行一些gdb命令。 我希望用户能够在代码的特定区域设置和中断/跟踪点,并运行一些调试命令

我想让用户输入需要调试的函数。然后,我取这个函数名并打印出函数的源代码,然后让用户选择要在哪行代码上设置断点/跟踪点。目前,使用反汇编命令,我可以打印出用户的内存地址,但我想打印实际的源代码

这可以在gdb中完成吗

目前:

Dump of assembler code for function test_function:
   0x03800f70 <test_function+0>:  push   %ebp
   0x03800f71 <test_function+1>:  mov    %esp,%ebp
   0x03800f73 <test_function+3>:  sub    $0x48,%esp
谢谢

编辑: 我明白了:

(gdb) list myFunction
941     directory/directory_etc/sourcefile.c: No such file or directory.
        in directory/directory_etc/sourcefile.c
然后我尝试指定linenum:

(gdb) list directory/directory_etc/sourcefile.c:941
936     in directory/directory_etc/sourcefile.c
因此,行为与您描述的类似,但“list filename:linenum”仍然不起作用

谢谢大家!

使用:

(gdb) list FUNCTION
有关详细信息,请参阅
列表
命令的联机帮助:

(gdb) help list
List specified function or line.
With no argument, lists ten more lines after or around previous listing.
"list -" lists the ten lines before a previous ten-line listing.
One argument specifies a line, and ten lines are listed around that line.
Two arguments with comma between specify starting and ending lines to list.
Lines can be specified in these ways:
  LINENUM, to list around that line in current file,
  FILE:LINENUM, to list around that line in that file,
  FUNCTION, to list around beginning of that function,
  FILE:FUNCTION, to distinguish among like-named static functions.
  *ADDRESS, to list around the line containing that address.
With two args if one is empty it stands for ten lines away from the other arg.
对于任何非玩具项目,您可能会遇到如下情况:

$ gdb /bin/true
<...>
(gdb) start
<...>
(gdb) list printf
file: "/usr/include/bits/stdio2.h", line number: 104
file: "printf.c", line number: 29

对于您看到的“sourcefile.c:没有这样的文件或目录”错误,您需要告诉GDB在哪里查找源代码。看见显然,您需要实际拥有要在计算机上列出的函数的源代码。

对于gcc

在编译源代码时添加调试选项标志-g:

gcc -g test.c
要进行测试,请使用:

gdb ./a.out
(gdb) list
有关更多功能,请查看手册页:

man gcc
man gdb

谢谢,当我在一个简单的文件(HelloWorld.exe)上运行这个命令时,它不会有问题。然而,我正在尝试使用gdb调试一个大型实时系统。我想查看的函数是在许多c文件中的一个,这些文件被编译成一个.elf文件,当我在那里运行它时,我得到:(gdb)在directory/directory_etc/code中列出函数941。c@user2342775,我修改了我的答案,当gdb的list命令显示函数名的多个定义时。这就是你看到的吗?我已经编辑了我的原始问题,试图让它更具可读性,谢谢!有没有办法问一下
gdb
函数是在哪里定义的?@x-yuri,是的!尝试“(gdb)信息行MY_函数”。我在这里写了一些关于使用GDB帮助导航Linux内核代码的注释。要真正使用这些功能,您需要阅读GDB手册的“第9章检查源文件”。当前函数:
gdb ./a.out
(gdb) list
man gcc
man gdb