if else 两个语句为什么同时执行了

作者:超级管理员 更新时间:2017-09-12 14:57:27 来源:未知 点击:15642
我的程序里有一个if判断,在dubug下运行正确,可在release下if else里的语句都执行了。下图方框里的语句。建议在if和else里分别加一句调试打印,看看是不是两条打印都输出理论上不会同时
我的程序里有一个if判断,在dubug下运行正确,可在release下if else里的语句都执行了。下图方框里的语句。


建议在if和else里分别加一句调试打印,看看是不是两条打印都输出

理论上不会同时执行,也可以再加一句调试打印,就是把flags[0]输出出来,看看是多少?

你怎么知道都执行了?
release模式本就不是用来调试的,因为有很多优化,有些代码行都被优化掉了,也没有调试信息,你在release下看到的逐行运行本就是不准确的。

这不可能吧?我倒觉得是这个地方它跑了两次甚至更多次,只是你没察觉到。。。

release 下调试指示的位置那些是不准确的

release版本进行调试模式,运行的显示代码的位置经常是错误的,所以这个做不了准!

重建所有 。

可以告诉你的是,这绝对不可能

引用 1 楼 cfjtaishan 的回复:
建议在if和else里分别加一句调试打印,看看是不是两条打印都输出


设置输出 也没用,两个括号都进去了,但输出只输出了一个条件的内容,另一个条件进去了,但是没有输出,跳过输出语句了。。。
因为条件里涉及数据库操作,现在定位是数据库连接出现问题,不知道为什么debug下运行正常,release下就出现问题,ado连接不上数据库

引用 7 楼 zhao4zhong1 的回复:
重建所有 。


reduild了,也没用

引用 2 楼 cfjtaishan 的回复:
理论上不会同时执行,也可以再加一句调试打印,就是把flags[0]输出出来,看看是多少?


打印出来flags[0]确实是1

正常情况下是不会出现这样的情况的,除非你的编译器出问题了。

引用 3 楼 sdghchj 的回复:
你怎么知道都执行了?
release模式本就不是用来调试的,因为有很多优化,有些代码行都被优化掉了,也没有调试信息,你在release下看到的逐行运行本就是不准确的。


是的,release下确实是这样,不是用来调试的,程序在release下运行跳来跳去,代码被优化了

引用 10 楼 Point_To_Point 的回复:
Quote: 引用 7 楼 zhao4zhong1 的回复:

重建所有 。


reduild了,也没用

都rebuild了

引用 9 楼 Point_To_Point 的回复:
Quote: 引用 1 楼 cfjtaishan 的回复:

建议在if和else里分别加一句调试打印,看看是不是两条打印都输出


设置输出 也没用,两个括号都进去了,但输出只输出了一个条件的内容,另一个条件进去了,但是没有输出,跳过输出语句了。。。
因为条件里涉及数据库操作,现在定位是数据库连接出现问题,不知道为什么debug下运行正常,release下就出现问题,ado连接不上数据库

如果没有将另外的打印打出来,说明只进入了一个分支。

没有那种可能性,只是你的ddb过时了而已,解决办法,重新编译。

只能进入一个分支。

引用 楼主 Point_To_Point 的回复:
我的程序里有一个if判断,在dubug下运行正确,可在release下if else里的语句都执行了。下图方框里的语句。


这种情况在函数执行一次的时候是不可能的,你可以打印log来标记执行流程,不要在release条件下调试,那样和代码对不上
如果函数被调用多次,倒是两个分支都有可能执行

引用 18 楼 shihengzhen101 的回复:
Quote: 引用 楼主 Point_To_Point 的回复:

我的程序里有一个if判断,在dubug下运行正确,可在release下if else里的语句都执行了。下图方框里的语句。


这种情况在函数执行一次的时候是不可能的,你可以打印log来标记执行流程,不要在release条件下调试,那样和代码对不上
如果函数被调用多次,倒是两个分支都有可能执行

嗯,正在看boost的日志功能怎么用

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程!
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步Debug版对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!
不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!

谢谢各位大神,问题解决了,是第一个执行语句出现异常了

推荐阅读

热门内容

请问一下遍历图像的时候 这种ALU写法为

就是遍历图像的时候, 一次处理2个像素或...

if else 两个语句为什么同时执行了

我的程序里有一个if判断,在dubug下...

求助一个计算问题?

#include in...

请解惑,关于QT用C++写串口通信时的一

我把代码贴出来吧,请帮我看看是哪里出了问...

已添加头文件,但报错找不到标识符

引用错误1error C3861: “r...

错误2365,怎么解决啊,求助

如图这么多短变量名放一块儿,很容易重名的...

感觉现代c++不如d语言

功能都是那些功能,现代c++的实现语法太...

逐行读取文件+并发处理,和先读入整个文件

文本的每一行都是一条记录,程序要求对每条...

C语言新手求助,输出的数字非常大

本帖最后由z4164362于2017-0...

c小白 求帮帮忙

# include #...

最新内容

cannot find -locilib

/usr/bin/ld: cannot find -locilibcollect...

请问一下遍历图像的时候 这种ALU写法为什么会使处理速度大大加快???

就是遍历图像的时候, 一次处理2个像素或者多个像素就是这种写法,下面代码是一次处...

if else 两个语句为什么同时执行了

我的程序里有一个if判断,在dubug下运行正确,可在release下if el...

selenium知识点小结

  环境:  Python:3.6.1  selenium:3.4.3  Fir...

哭晕乔布斯 iPhone 8“评测”已经出来了

      iPhone 8的评测想必已经让你等的花儿都升华了吧~虽说这款机器明...

MIX 2不光有小米 DOOGEE MIX 2海外将发

    中关村在线消息:昨天小米在北京发布了全面屏手机小米MIX2,如今来自深圳...

千元颜值担当 999元起荣耀V9 play开售

    中关村在线消息:  9月12日10:08,荣耀家族全新颜值担当荣耀V9 ...

您会熬夜看苹果iPhone X新品发布会吗?

       猛击进入iPhone8发布会 每小时都有奖     北京时间9月1...

参展美洲移动通信大会 中兴手机力争美国前三

  继二季度美国市场优异表现,中兴手机持续发力大国市场,将于9月13日参展美洲移...

512GB/45.7万 镀金版苹果iPhone X来袭

       猛击进入iPhone8发布会 每小时都有奖    中关村在线消息:...

这款手机长得个性 系统也真真儿好用

    中关村在线消息: 锤子科技的中端机坚果Pro上市四个月来,凭借特立独行的...

华为Mate10手机壳曝光 竖排徕卡后双摄

    中关村在线消息:下月16日华为将发布首发麒麟970的华为Mate10,该...

陶瓷机身太脆弱 小米MIX2在国外被摔了

    中关村在线消息:昨天下午小米发布了两款新机,一款小米MIX2,一款小米N...

华为Mate10前面板曝光 18:9屏高屏占比

    中关村在线消息:10月16日华为将在德国慕尼黑正式发布Mate 10系列...

苹果iPhone X暗红色曝光 或皇帝版专享

       猛击进入iPhone8发布会 每小时都有奖      中关村在线消...

苹果发布会就在今天 双"8"对决一触即发

猛击进入iPhone8发布会 每小时都有奖    中关村在线消息:对于智能手机行...

链表删除节点问题

delete函数不能删除第一个节点(fuck_1),出现段错误;请教各位大佬,错...

安全扫描工具 AppScan

  IBMRationalAppScan是一个面向Web应用安全检测的自动化工具...

如何负责一个项目的质量保证工作?

  问题  通常,我在面试测试相关候选人时,除了技术等硬性标准外,我还非常希望候...

关于SQLite数据插入

我做了一个界面界面想把数据插入到SQLite中,但是每次点击保存到数据库就会闪退...