2011-09-22 48 views
7

我正在使用的游戏引擎在调试版本中太慢,无法调试游戏。我希望编译器内联小函数(特别是在Vector/Matrix和容器类中)。这可能会或可能不会加快调试版本中的游戏速度。在大量分析和试图找出瓶颈之前,我想我会先尝试这一点,因为我不得不做最少的工作,结果可能是有希望的。调试版本中的内联函数(Visual C++ 2008)

那么,有没有办法让Visual C++编译器在调试版本中内联函数?

回答

5

项目选项 - > C/C++ - >优化 - >内联函数扩展。把它变成/Ob2。在Debug配置中执行此操作。

在Release中,内联函数扩展是由其他优化设置隐含的,所以即使默认情况下所有配置都对该设置表示“默认”,但行为确实不同。

我相信调试版本应该具有与发布一样的内联扩展行为;真的没有理由不这样做。

http://msdn.microsoft.com/en-us/library/47238hez.aspx

+0

感谢您的回答,我会在找到时间后立即检查,然后检查标记答案。 – Samaursa

+0

我检查这是正确的,因为在VS帮助文件中没有迹象表明这对于调试版本不起作用(编译器警告不支持编译器标志)。我能够打入最简单的一行功能,但是我无法在发行版中这样做。除非我看着装配,否则不确定它是否内联。 – Samaursa

+0

这会导致调试器变得“困惑”吗? – paulm

-1

DEBUG是由Visual Studio定义当一个项目在调试模式,这样编译:

#ifdef DEBUG 
    inline void fn() { 
#else 
    void fn() { 
#endif 
+0

问题是,在调试时,编译器完全忽略了'inline'关键字 – Samaursa

0

你可以尝试__forceinline。请务必阅读该页面上的调试版本(关闭/Ob0选项)。

我怀疑这是不会改变性能的。如果您还没有尝试过的另一件事,那就是将符号添加到发布版本中。它可以很好地调试很多问题。

0

你混淆了两个编译器选项。 /O影响优化,包括内联。 /ZI创建用于调试的PDB文件。它们可以独立设置。

虽然克隆“调试”配置可能很有用,并且可以使用/O1/ZI创建“调试优化”配置。

+0

他们可以,是的,但随着优化,太多的东西被优化。例如,在调试信息上进行优化时,大部分时间都无法正确调试字符串。即使有调试信息,调试器也无法显示许多本地变量的值,并进行优化。 – Samaursa