2012-06-21 62 views
1

我正在用C++和Lua编写程序。当我在调试器的发布模式OUTSIDE下运行程序时,程序的行为并不像预期的那样(它不会崩溃,它只是不会做我认为的)。当我从调试器启动它时,它表现得很好。在调试器外运行时发布编译更改行为

我知道程序在调试器中运行的方式与在一个之外运行的方式有差异(堆差异?一些未初始化的变量?)。是否可以配置调试器,以便尽可能少地更改我的程序的发布版本,以便在调试时尝试解决此问题?

+0

这听起来像你可能有一些代码,产生未定义的行为。但很难说没有看到代码。你可以发布麻烦的代码吗? –

+0

不是。我不知道问题到底是什么。我的程序中有几个实体没有显示,但我尚未缩小原因。 – Raptormeat

+0

您确定您在调试器内部和外部运行完全相同的内部版本吗? – lezebulon

回答

2

这里有几件事情尝试:在调试器外部

  • 运行,但然后附加到进程之后。当进程从调试器开始时,它将有一个稍微不同的环境,所以如果这是不同行为的原因,那么这将允许您调试它
  • 创建关闭优化的版本构建,看看你是否得到在调试器内部和外部运行相同的行为。如果你仍然可以重现问题,那么这将使调试(通过使用上述附加处理方法)更容易
+0

谢谢 - 在程序运行之后附加到程序中,允许我调试此问题。我不需要尝试第二个建议,但它也是一个非常好的建议! – Raptormeat

+0

出于兴趣,问题是什么?我很想知道在调试器外部运行时环境与调试堆不同(除了调试堆之外)。 –

+0

这是一个未初始化的变量!最后的简单问题。成员布尔值(对于从堆中创建的类)我以某种方式从未初始化过,始终在调试器中运行时开始为true,并最终在调试器外部为false。 – Raptormeat

0

不确定如何使调试器像发布版本一样行事,但您可以在某种程度上模拟它们。

取决于行为的差异究竟是什么。

是否所有变量都已初始化?调试器这样做。您还可以使用asm {int 3}打破发布模式。