问题描述
我是一个完整的初学者,可以逆转英语。 最近,我一直在遍历gdb以及如何调试程序。
如果它很简单,我会怀疑我
#include <stdio.h>
#include <stdlib.h>
int flag(void){
puts("okay you got this");
}
int main(void){
puts("nope try again");
}
所以我成功地编译了该程序,当我尝试运行该程序时,它给了我主要功能输出
nope try again
所以现在我该如何调用标志函数以在gdb中给出“好了,你得到了”的输出结果。我尽了最大努力,浏览了博客以获取答案,但最终以失败告终病得到解决方案,并请我建议我缺少什么,以及我需要了解的工作原理
解决方法
您的意思是如何调用flag()
并跳过puts
中的main
?,在这种情况下:
(gdb) break main
(gdb) run
(gdb) print flag()
okay you got this
(gdb) break 10
(gdb) jump 10
(gdb) quit
,
函数flag
没有被调用,很有可能它不会在不需要的情况下出现在可执行文件中
这被称为死代码消除