在上一篇《GDB调试技巧实战–为release版本的函数寻找参数值》中,我们探讨了一种为函数找参数的办法,
但是,那是最理想的情况 -
- 编译时没有使用-fomit-frame-pointer。
- 编译时没有开启优化。
还是接着用上节的c代码,让我们详细看看call1函数在不同编译条件下的汇编代码。
- 没使用-fomit-frame-pointer,没优化
一切都很完美(rbp是栈基,rsp是占顶,使用edi/esi等寄存器传参,没用的变量也分配了空间):
gcc release_core_csdn.c
(gdb) disass call1
Dump of assembler code for function call1
本文介绍了在GDB中调试优化过的release版本函数参数的方法,特别是当编译器使用了-fomit-frame-pointer和开启优化时。通过分析汇编代码和利用eye_catcher字符串来定位函数栈,提高调试效率。虽然会牺牲少量性能,但能有效应对C/C++程序常见的内存问题。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



