2012-06-21 61 views
1

我正在用C++和Lua編寫程序。當我在調試器的發佈模式OUTSIDE下運行程序時,程序的行爲並不像預期的那樣(它不會崩潰,它只是不會做我認爲的)。當我從調試器啓動它時,它表現得很好。在調試器外運行時發佈編譯更改行爲

我知道程序在調試器中運行的方式與在一個之外運行的方式有差異(堆差異?一些未初始化的變量?)。是否可以配置調試器,以便儘可能少地更改我的程序的發佈版本,以便在調試時嘗試解決此問題?

+0

這聽起來像你可能有一些代碼,產生未定義的行爲。但很難說沒有看到代碼。你可以發佈麻煩的代碼嗎? –

+0

不是。我不知道問題到底是什麼。我的程序中有幾個實體沒有顯示,但我尚未縮小原因。 – Raptormeat

+0

您確定您在調試器內部和外部運行完全相同的內部版本嗎? – lezebulon

回答

2

這裏有幾件事情嘗試:在調試器外部

  • 運行,但然後附加到進程之後。當進程從調試器開始時,它將有一個稍微不同的環境,所以如果這是不同行爲的原因,那麼這將允許您調試它
  • 創建關閉優化的版本構建,看看你是否得到在調試器內部和外部運行相同的行爲。如果你仍然可以重現問題,那麼這將使調試(通過使用上述附加處理方法)更容易
+0

謝謝 - 在程序運行之後附加到程序中,允許我調試此問題。我不需要嘗試第二個建議,但它也是一個非常好的建議! – Raptormeat

+0

出於興趣,問題是什麼?我很想知道在調試器外部運行時環境與調試堆不同(除了調試堆之外)。 –

+0

這是一個未初始化的變量!最後的簡單問題。成員布爾值(對於從堆中創建的類)我以某種方式從未初始化過,始終在調試器中運行時開始爲true,並最終在調試器外部爲false。 – Raptormeat

0

不確定如何使調試器像發佈版本一樣行事,但您可以在某種程度上模擬它們。

取決於行爲的差異究竟是什麼。

是否所有變量都已初始化?調試器這樣做。您還可以使用asm {int 3}打破發布模式。