OD除錯多執行緒

whatday發表於2013-06-08

OD只能單執行緒除錯,也就是每次只能跟一條執行緒。以前我除錯時常常迷迷糊糊就進入新執行緒,而有時又怎麼也進不了。。。

最近大概明白了一點點。

方法:首先是設定StrongOD,如下圖:


不要勾選“Skip Some Exceptions”,  還有OD本身裡面的異常都不要勾選!很重要!

到新建執行緒裡面有個引數是執行緒函式的指標,如下圖所示:



首先是在上面那個“003E015C”處出下F2斷點.

然後直接F8步過CreateThread函式,一般不會跳到"003E015C", OD單執行緒除錯的原因……

讓它跳到"003E015C"一般是下面跟有Sleep函式或者是WaitForSingleObject函式,有時候卻沒有遇見這樣的函式,一直在主程式囧....

所以我一般手動修改它下面接著的程式碼,一般修改為Sleep函式,引數少麼?函式名短…………如下圖,注意Sleep的函式大小寫……



修改前做個快照,比較煩人的有很多CreateThread的那種,執行緒多了就一個除錯吧……

你要是沒有取消StrongOD的忽然異常設定會導致下面的情況發生,開始困擾了我很久(預設是勾選的)


 

 

最近發現了一種簡單的方法,首先點選OD介面上那個T標識,然後右鍵“設定優先權”-->"空閒"

 

注意開始的優先順序是“32+0”,修改後的事“32-15”即如圖:

這樣F8步過CreateThread的呼叫是會自動跳到那個“003E015C”。

相關文章