我想分发和可执行文件内置在C++与释放模式的充分优化。我正在生成一个核心转储的情况下,未处理的异常,我希望能够得到一个可读的调用堆栈的minidump。
我在网上看到一些使用/DEBUG选项的解决方案,但是当我启用该选项时,可执行文件会明显变大。我的担忧是:
- 也许visual studio在exe中嵌入了信息,以便更容易对其进行反向工程
- 它不是完全优化的可执行文件,因为它没有/DEBUG选项
否则为什么文件会更大?
有没有可能只保留一个文件中的调试信息(pdb文件不就是用来做这个的吗?),这样就足以重建调用堆栈了?
我是否必须启用其他选项和/DEBUG,这样exe就不会增加大小?
我不一定对具体是哪个指令导致问题感兴趣,但至少我需要对调用堆栈进行可靠且可读的重建,以便我可以识别负责崩溃的函数。
2条答案
按热度按时间mwkjh3gx1#
您可能需要
/ZI
或/Zi
选项沿着/DEBUG:FULL
。在内部为每个版本归档
.pdb
文件是非常标准的做法。然后,当客户报告崩溃时,内存转储可以与正确版本的调试信息相匹配,调试器会给出一个不错的堆栈跟踪。存档产品附带的任何
.dll
的调试信息。如果崩溃发生在.dll
代码中,则调试器将无法在没有.pdb
的情况下创建合理的堆栈跟踪。kmb7vmvb2#
正如@veefu所提到的,需要
/Zi
和/DEBUG
选项,但这仍然会使大小更大。但事实证明,
/OPT:REF
选项也是需要的,因为/DEBUG
会自动禁用它,因此您需要显式地重新声明它。下面是使用CMake时需要设置的内容: