首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDB在设置断点时不显示文件路径

GDB在设置断点时不显示文件路径
EN

Stack Overflow用户
提问于 2018-03-10 21:00:37
回答 1查看 360关注 0票数 0

你好,堆栈溢出社区!

因此,我目前正在学习一门关于操作系统的课程,我正在尝试使用GDB调试器设置断点来跟踪OS 161的某些代码的执行情况。我已经玩了几个小时了,但是我很难理解为什么调试器只显示函数名而不是函数所在的文件路径。例如,显示菜单的代码位于/os161/os161-1.11/kern/main/main.c中,当用户选择一个名为"tt3“的选项并位于名为tt3.c的文件中时,将调用一个函数(threadtest3)。它的路径是:~/os161/os161-1.11/kern/test/tt3.c

我遇到的问题不是设置断点,而是为什么gdb只在调用函数时显示函数名,而不是显示完整路径。例如,当我在函数threadtest3的开头设置一个断点时,一旦在菜单中选择了"tt3“选项,调试器就会显示如下:

查看调试器如何显示回溯跟踪,但只显示已被调用的函数名--不知道文件在哪里或函数中的哪一行称为另一行?我不知道为什么会这样,调试器如何打印出文件start.S中执行位置的行号,在这张图片中是第163行。

我正在使用GDB版本6.6 (如果这也是相关信息的话,Windows 10 ),起初我以为它是我的调试器的版本,但Youtube上有一个用户拥有相同的版本,他的输出不像我的。(https://www.youtube.com/watch?v=U4PYFgzevQ0)

有什么想法吗?

感谢您所能提供的任何见解。

*更新2018年11月3日/*

因此,我尝试编辑defs.mk文件,根据注释,该文件保存了用于编译的所有键和弦和常量。此文件位于下面所示的目录中

当我第一次查看这个文件defs.mk时,CC标志刚刚被设置为CC 161-gcc。因此,在对这个站点上的类似调试问题进行了研究和查看之后,我试图通过编写CC = cs161-gcc - g3 -ggdb来更新这一行。我还为HOST_CC和HOST_LDCC做了类似的工作,您可以在下面的图片中看到它们。

然后,在转到/ of 161/os161-1.11/kern/compile/ASST1 1目录后,我运行make来删除在运行make时创建的所有对象文件。然后,通过转到/ by 161/os161-1.11/kern/conf并运行./config ASST1来重新配置内核。当我回到/ on 161/os161-1.11/kern/compile/ASST1 1,并在运行make依赖之后运行make时,我可以看到它显示了正在进行的更改,看起来它正在编译打开调试模式的文件,但我仍然需要处理相同的问题。您可以在下面看到运行make的输出

EN

回答 1

Stack Overflow用户

发布于 2018-03-11 01:59:00

有什么想法吗?

您的代码不是为调试编译的。您需要使用-g标志重新构建它。

start.S (您从libc链接)是用-g编译的,因此它显示了文件和行号。

那么,我会将-g标志放置在./config ASST1附近吗?或者其他地方?

您需要阅读./config并找出它。

如果您的config看起来像,那么您需要编辑ASST1并确保其中有debug指令,比如这里

更新:

您的命令行显示实际上正在使用-g

因此,您的问题很可能是调试错误的二进制文件。

通常情况下,构建一个完全调试的可执行文件,然后在其副本上运行strip。剥离的副本是您下载到目标(或模拟器)的副本,并且要小得多(因为所有的调试信息都已从其中删除)。未剥离的副本是您希望提供给调试器的副本。如果您给调试器一个剥离的副本,它将仍然工作,但不是以您希望它工作的方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49213995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档