gpt4 book ai didi

debugging - 调试器如何跟踪 C 代码和汇编指令之间的映射?

转载 作者:行者123 更新时间:2023-12-02 23:23:22 25 4
gpt4 key购买 nike

我想知道调试器如何能够逐行浏览源代码。

编译源代码并运行程序后,调试器如何知道机器级指令和高级语句之间的对应关系?

例如,如果我在源文件中的一行上设置断点,它如何知道要停止在哪条机器级指令处?

最佳答案

查看 gcc -g -S 的 asm 输出,您将看到与 C 对应的 asm block 的 .line debug-info 指令等源代码行。

(启用优化后,同一行可以映射到多个不连续指令,因此它变得更加棘手,但编译器仍然尝试有用并将大多数指令映射到某些源代码行,即使它们实际上是优化和执行源代码中未出现的操作的结果...)。

https://godbolt.org/使用与调试器相同的调试信息,但使用它进行颜色突出显示以将源代码行与 asm 进行匹配。

<小时/>

当汇编器汇编这些.line指令时,它会在.o目标文件中创建调试信息,该文件最终链接到可执行文件或库中。或者分割成一个单独的调试符号文件。或者剥离。

调试器读取的就是这个调试信息。

(调试信息还包括有关哪些命名 C 变量存储在何处以及它们的类型的信息。对于局部变量,这些位置相对于包含它们的函数的堆栈帧。)

关于debugging - 调试器如何跟踪 C 代码和汇编指令之间的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56136249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com