我想在gdb中調試一個低級別的C程序。這個程序的目的是作爲一個包裝,啓動另一個進程,並監控/干擾其內存使用。程序僅在第一次運行時掛起?
當我在gdb中加載程序時,一切似乎都正常(如果不是理想的話)。我看到新的流程叉,然後它掛起。就其本身而言,這不會太奇怪;可能是我的代碼中的某個地方存在死鎖或無限循環。
但是,如果我中斷並殺死gdb內的進程,然後再次在同一個gdb會話中運行它,一切正常工作正常。大約需要半秒鐘的時間才能運行,並且完全按照它應該執行的操作。
所以我的問題是:什麼是GDB之間保持我的程序運行?第一次和第二次執行之間會有什麼變化?
某些內存可能有一些不同的值。一些硬件狀態可能不同(你說它是低級的)。許多事情都可能發生。 –
您可能正在訪問一些未初始化的變量,從而進入某種鎖。在第二次和後續運行中,正在運行的進程的數據段可能會重複使用,並且與以前一樣,但現在作爲初始值。注意「未初始化的變量」警告。 – tofro
「但是當我中斷並殺死進程」 - *哪個進程?您正在調試的那個,還是分叉的(或兩者)?用實際的代碼 –