gdb - 重新设置常量

dje*_*lin 5 c c++ gdb constants

我有

const int MAX_CONNECTIONS = 500;
//...
if(clients.size() < MAX_CONNECTIONS) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试为 MAX_CONNECTIONS 找到“正确”的选择。所以我启动了 gdb 和set MAX_CONNECTIONS = 750. 但我的代码似乎没有响应此更改。我想知道这是否是因为 const int 在编译时被解析,即使它最终在运行时被碰撞。这听起来正确吗?使用 GDB 有什么方法可以绕过这种效果,而无需在程序中编辑代码?加热到500需要一段时间。

tem*_*def 3

我怀疑编译器看到变量是const,正在将常量内联到程序集中,并且没有让生成的代码实际读取变量的值MAX_CONNECTIONS。C++ 规范的措辞方式是,如果显式标记原始类型的变量const,则编译器可以出于优化目的对其做出某些假设,因为任何更改该常量的尝试都是 (1) 非法的或 (2)导致未定义的行为。

如果您想使用 GDB 执行此类操作,请考虑标记该变量volatile,而不是const向编译器指示它不应对其进行优化。或者,让此信息由其他一些数据源(例如文件内的配置选项)控制,这样您就不会为了更改值而从其下面清除程序的内存。

希望这可以帮助!