gpt4 book ai didi

c++ - 在优化的代码行停止调试器

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:38 24 4
gpt4 key购买 nike

如果我想在一个空的代码块中停下来,这总是一个问题。

if (...)
{ // I want the debugger to stop here!
}

如果我添加一行不影响程序行为的任意代码,它可能会被优化掉,具体取决于行

if (...)
{
int a;
a = a; // won't work
}
if (...)
{
int a;
int b = a; // will work
}

所以这里出现了 2 个问题:

1) 最简单的单行代码是什么,它不会被优化掉(但实际上什么都不做!),我可以用它来停止调试器?2) 有没有一种方法可以切换所有优化,以便能够在任意 行代码处停止?编译器标志 -O0 不起作用。

最佳答案

一个足够好的单行代码可能是一些有用和有趣的 assert具有不会被编译器常量折叠的条件的语句。经常一些有意义有用的assert (p!=NULL)assert(i>0)其中 p是一些现有的指针变量或形式,或 i是一些现有的有符号整数变量或形式的,就足够了。

顺便说一句,你正处于项目的调试阶段,所以添加足够好有意义assert语句很有帮助。你当然想要 <cassert> 要包含的 header 。

别忘了 assert(3)如果使用 -DNDEBUG 编译,语句将被跳过旗帜。

您还可以使用(在 Linux/x86 上)asm volatile ("nop") .请注意,调试器需要一些代码来放置断点。您不想要一个代码。

关于c++ - 在优化的代码行停止调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28736421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com