|
|
1
34
很多时候,在C++中的调试模式中,所有变量都是空初始化的,而除非明确说明,否则在释放模式中不会发生相同的变量。 检查是否有任何调试宏和未初始化的变量
|
|
2
21
一个常见的陷阱是在断言中使用带有副作用的表达式。 |
|
|
3
11
在过去,我一直被一些bug所困扰,这些bug在调试版本中表现良好,但在发布版本中崩溃。有许多潜在的原因(当然包括那些已经在这篇文章中总结过的原因),我已经被以下所有的原因抓住了:
|
|
|
4
9
|
|
|
5
3
对如果您有条件编译,则可能存在计时错误(优化的发行版代码、非优化的调试代码)、内存重用与调试堆。 |
|
6
3
它可以,特别是如果您在C领域。
编辑:我看到其他人提到了它:当然,如果不在调试模式下编译,您可能会有条件地排除整个代码部分。如果是这样,我希望这是真正的调试代码,而不是对程序本身的正确性至关重要的事情! |
|
|
7
3
CRT库函数在调试与发布(/MD vs/MDd)中的行为不同。
|
|
|
8
2
当然,例如,如果您使用如下结构
|
|
|
9
1
你需要提供更多的信息,但是是的,这是可能的。这取决于调试版本的功能。您可能会有日志记录或额外的检查,但这些检查不会被编译到发布版本中。这些只进行调试的代码路径可能会产生意外的副作用,这些副作用会以奇怪的方式更改状态或影响变量。调试生成通常运行较慢,因此这可能会影响线程和隐藏竞争条件。对于发布编译的直接优化也是如此,发布编译有可能(尽管现在不太可能)使优化短路。 |
|
10
1
如果没有更多细节,我将假设“notok”意味着它要么不编译,要么在运行时抛出某种错误。检查是否有依赖于编译版本的代码,通过
|
|
|
11
1
|
|
|
12
1
这是可能的,如果您有条件编译,使得调试代码和发布代码不同,并且代码中存在一个只在发布模式下使用的bug。 除此之外,这是不可能的。调试代码和发布代码的编译方式不同,在是否在调试器下运行的情况下,代码的执行方式也不同,但如果这些差异中的任何一个导致性能差异以外的任何差异,那么问题始终存在。 在调试版本中,错误可能没有发生(因为时间或内存分配不同),但这并不意味着错误不存在。可能还有其他与调试模式无关的因素,这些因素会改变代码的计时,从而导致错误是否发生,但归根结底,如果代码是正确的,那么在任何情况下都不会发生错误。
|
|
|
13
1
有一些编译器优化 因为他们太咄咄逼人了。
|
|
|
14
1
在调试模式下,如果您忘记用return语句结束这样的路径,那么默认情况下该函数通常返回0。 但是,在释放模式下,函数可能返回垃圾值,这可能会影响程序的运行方式。 |
|
|
15
0
这是可能的。如果发生这种情况,并且不涉及条件编译,那么您可以非常确定您的程序是错误的,并且仅由于偶然的内存初始化,甚至内存中的布局而在调试模式下工作! |
|
|
16
0
我只是在调用没有恢复寄存器先前值的汇编函数时体验到了这一点。
无论如何,看看你是否在代码中的任何地方间接地弄乱了CPU寄存器。 |
|
|
17
0
另一个原因可能是DB调用。 是否在同一线程中多次保存和更新同一记录, 有时需要更新。 更新可能失败或未按预期工作,因为上一个create命令仍在处理,对于更新,db调用未能找到任何记录。 这在调试中不会发生,因为调试器确保在登录之前完成所有挂起的任务。 |
|
|
18
0
我记得不久前我们在c/c++中构建dll和pdb时。 我记得:
然后继续经历这个循环。 在处理这些bug时,为了不耽误生产,我们有时会临时将发布版本替换为DLL的调试版本。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |