2012-10-01 64 views

回答

1

如果您所指的是「變量監視」或「內存斷點」,如果您要求調試程序在內存變量或區域發生更改時中斷,那麼可以通過讓CPU監視所有寫入訪問的內存地址/範圍,並打入調試器,讓其決定是否打破每次寫入。 (我不知道CPU /調試器是如何完全實現這一點的,只是它確實如此)。

這不會修改您的內存內容或內存中的可執行代碼。

4

據我所知,斷點不會改變編譯的代碼,既不是正常的也不是數據斷點。

程序正在使用編譯器進行編譯,然後調試器使用編譯的可執行文件運行。

正在更改的代碼是內存代碼。調試器將可執行文件加載到內存並在那裏更改代碼。

+0

一個正常的斷點會稍微改變編譯後的代碼,我認爲它只是一個INT3指令放在你放置斷點的行之前。請參閱:http://stackoverflow.com/questions/3915511/how-do-breakpoints-work-in-c-code – sji

+2

此人是正確的。證明:你可以在調試器之外啓動一個可執行文件,然後附加一個調試器並設置一個斷點。編譯後的代碼沒有可能發生變化。 編輯:我明白了,謝謝你的評論。我以爲你問過編譯器是否生成了不同的代碼,如果你有一個斷點集,它不會。但是,您在詢問調試器是否更改/檢測了內存中的代碼。 –

+0

調試器會修改內存中的代碼,以便在所需的中斷點處插入INT3。這是在運行時,與編譯無關。 – Mordachai

相關問題