第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

程序僅在發(fā)布版本時(shí)崩潰-如何調(diào)試?

程序僅在發(fā)布版本時(shí)崩潰-如何調(diào)試?

C++
慕村225694 2019-11-25 10:21:40
我這里遇到的是“薛定inger之貓”類型的問題-我的程序(實(shí)際上是我程序的測(cè)試套件,但仍然是一個(gè)程序)崩潰了,但僅在以發(fā)布模式構(gòu)建時(shí)才出現(xiàn),并且僅在從命令行啟動(dòng)時(shí)才崩潰。通過穴居人調(diào)試(即到處都是討厭的printf()消息),我確定了代碼崩潰的測(cè)試方法,盡管不幸的是,實(shí)際的崩潰似乎發(fā)生在某些析構(gòu)函數(shù)中,因?yàn)槲铱吹降淖詈笠粭l跟蹤消息在其他執(zhí)行干凈的析構(gòu)函數(shù)。當(dāng)我嘗試在Visual Studio中運(yùn)行該程序時(shí),它不會(huì)崩潰。從WinDbg.exe啟動(dòng)時(shí)也是如此。僅在從命令行啟動(dòng)時(shí)才發(fā)生崩潰。順便說一句,這是在Windows Vista下發(fā)生的,不幸的是,我現(xiàn)在無法使用XP計(jì)算機(jī)進(jìn)行測(cè)試。如果我可以讓W(xué)indows打印出堆棧跟蹤信息,或者可以像終止程序一樣干凈地終止程序,那真是太好了。是否有人對(duì)我如何在此處獲取一些更有意義的信息以及希望修復(fù)此錯(cuò)誤有任何建議?編輯:?jiǎn)栴}確實(shí)是由越界數(shù)組引起的,我將在本文中對(duì)此進(jìn)行更多描述。感謝大家為發(fā)現(xiàn)此問題所提供的幫助!
查看完整描述

3 回答

?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

在我見過或聽說過的100%的情況下,C或C ++程序在調(diào)試器中運(yùn)行良好,但在外部運(yùn)行時(shí)失敗,原因一直在寫到函數(shù)本地?cái)?shù)組的末尾。(調(diào)試器將更多內(nèi)容放在堆棧上,因此您不太可能覆蓋重要內(nèi)容。)


查看完整回答
反對(duì) 回復(fù) 2019-11-25
?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

當(dāng)我遇到這樣的問題之前,通常是由于變量初始化。在調(diào)試模式下,變量和指針會(huì)自動(dòng)初始化為零,而在發(fā)布模式下則不會(huì)。因此,如果您有這樣的代碼


int* p;

....

if (p == 0) { // do stuff }

在調(diào)試模式下,if中的代碼未執(zhí)行,但在釋放模式下p中包含未定義的值,該值不太可能為0,因此執(zhí)行該代碼通常會(huì)導(dǎo)致崩潰。


我會(huì)檢查您的代碼中是否存在未初始化的變量。這也適用于數(shù)組的內(nèi)容。


查看完整回答
反對(duì) 回復(fù) 2019-11-25
?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

到目前為止,還沒有任何答案試圖對(duì)可用于調(diào)試發(fā)行版應(yīng)用程序的可用技術(shù)進(jìn)行認(rèn)真概述:

  1. 由于多種原因,發(fā)行版和調(diào)試版的行為有所不同。 這是一個(gè)很好的概述。這些差異中的每一個(gè)都可能導(dǎo)致Release版本中的錯(cuò)誤,而該錯(cuò)誤在Debug版本中不存在。

  2. 調(diào)試器的存在也可能會(huì)改變程序的行為,包括發(fā)行版和調(diào)試版??吹竭@個(gè)答案。簡(jiǎn)而言之,至少當(dāng)連接到程序時(shí),Visual Studio調(diào)試器會(huì)自動(dòng)使用“調(diào)試堆”。您可以使用環(huán)境變量_NO_DEBUG_HEAP關(guān)閉調(diào)試堆。您可以在計(jì)算機(jī)屬性或Visual Studio的“項(xiàng)目設(shè)置”中指定此設(shè)置。這可能會(huì)使崩潰與附帶的調(diào)試器一起再現(xiàn)。

    有關(guān)調(diào)試堆損壞的更多信息,請(qǐng)參見此處。

  3. 如果以前的解決方案不起作用,則需要捕獲未處理的異常,并在發(fā)生崩潰的實(shí)例上附加事后調(diào)試器。您可以為此使用WinDbg,有關(guān)可用的驗(yàn)尸調(diào)試器及其在MSDN上的安裝的詳細(xì)信息

  4. 您可以改進(jìn)異常處理代碼,如果這是生產(chǎn)應(yīng)用程序,則應(yīng):

    一種。使用以下命令安裝自定義終止處理程序std::set_terminate

    如果要在本地調(diào)試此問題,可以在終止處理程序內(nèi)運(yùn)行一個(gè)無限循環(huán),并將一些文本輸出到控制臺(tái)以通知您std::terminate已被調(diào)用。然后連接調(diào)試器并檢查調(diào)用堆棧。 或者您按照此答案中的說明打印堆棧跟蹤。

    在生產(chǎn)應(yīng)用程序中,您可能希望將錯(cuò)誤報(bào)告發(fā)送回國(guó)內(nèi),最好是將其與一個(gè)小的內(nèi)存轉(zhuǎn)儲(chǔ)一起發(fā)送,以便您按此處所述分析問題。

    b。使用Microsoft的結(jié)構(gòu)化異常處理機(jī)制,該機(jī)制允許您捕獲硬件和軟件異常。參見MSDN。您可以使用SEH保護(hù)部分代碼,并使用與a)中相同的方法來調(diào)試問題。SEH提供了有關(guān)從生產(chǎn)應(yīng)用程序發(fā)送錯(cuò)誤報(bào)告時(shí)可以使用的異常的更多信息。


查看完整回答
反對(duì) 回復(fù) 2019-11-25
  • 3 回答
  • 0 關(guān)注
  • 459 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)