如何在gdb中调用functionvoid

问题描述

我是一个完整的初学者,可以逆转英语。 最近,我一直在遍历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没有被调用,很有可能它不会在不需要的情况下出现在可执行文件中

这被称为死代码消除