我不完全了解以下内容:
当一起使用调试和优化时,优化器执行的内部重新排列可能使您难以在调试器中检查优化程序时看到发生了什么。例如,语句的顺序可能会更改。
我的理解是,当我使用该-g
选项构建程序时,可执行文件将包含一个符号表,其中包含变量,函数名称,对其的引用及其行号。而当我使用优化选项进行构建时,例如,指令的顺序可能会根据优化而改变。
我不明白的是,为什么调试更加困难。我想看一个例子,以及一个易于理解的解释。
简单的例子:
int a = 4;
int b = a;
int c = b;
printf("%d", c);
可以优化为:
printf("%d", 4);
实际上,在优化的编译中,编译器很可能会做到这一点(当然是在机器代码中)
调试时,调试器将允许我们检查与a,b和c关联的内存,但是当顶部版本被优化为底部版本a,b和c时,RAM中不再存在。这使得检查RAM变得更加困难,以找出正在发生的情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句