【发布时间】:2013-10-11 15:24:46
【问题描述】:
我有一个 c++ 项目,其中调试和发布模式的行为不同。例如。在发布模式下,我得到了错误的分配错误,而在调试模式下,一切都运行良好。也许这种差异来自不同的运行速度。
您有什么提示和提示如何在没有标准调试器(如 gdb)的情况下调试程序?我可以尝试在关键区域进行很多操作,但这似乎不是最聪明的方法......也许有一种方法可以在不使用调试符号的情况下获取有关某些错误位置的一些信息?有什么工具吗?
【问题讨论】:
-
您确定差异是由调试符号引起的吗?生成调试/发布二进制文件的编译命令是什么?
-
您可以在发布版本中使用调试符号,它根本不应该改变程序的行为。如果您在调试/发布版本之间遇到问题,那么很可能您有一些未定义的行为或未初始化的变量导致问题。
-
错误的分配错误是异常吗?您可以使用堆栈跟踪捕获并记录异常吗?每个版本实际使用了多少内存?
-
仅仅添加
-g来发布构建的标志不应该改变执行流程中的任何事情。如果是这样 - 这件事需要调试。同时,您可以尝试使用单独的调试符号映射文件,gdb 支持。