2011-12-01 52 views
0

假設一些進程調試另一個進程(通過調用DebugActiveProcess())。調用DebugBreakProcess()之後 - 事件的dwThreadId表示什麼?

然後一些其他進程/線程在該調試過程產生斷點異常(通過調用DebugBreakProcess())。 調試器然後接收此EXCEPTION_DEBUG_EVENT-> EXCEPTION_BREAKPOINT事件和在DEBUG_EVENT結構的場dwThreadId將持有一些ID。

我根本問題是 - 這是什麼dwThreadId代表? (MSDN表示它是「發生調試事件的線程的標識符」)。

我關注的是以下幾點:


  1. 是什麼意思「在其中發生了調試事件」?難道這個過程的所有線程都以某種方式發出信號,因此這個過程完全被阻塞了嗎?

  2. 而且,從東西我看,這種機制的工作原理是這樣的:

    的DebugBreakProcess()API通過在調用一個斷點指令,從而導致正常SEH目標進程作品創建線程機制接管。

    這意味着有可能該dwThreadId實際上是這個新創建的線程的ID,而不是任何原始進程的線程的ID。我對麼?

  3. 如果已調試的進程多線程(實際上幾乎可以肯定它是)? 這是調用DebugBreakProcess()API時「在處理器中」的線程的ID嗎?

UPDATE:這一切塊回答。看到第一個答案。


  1. 怎麼樣了雙核系統的情況下,與同一進程的兩個線程正在並行運行的?哪一個會贏得,並將在此ID中陳述?或者,它可能會導致兩個不同的EXCEPTION_BREAKPOINT異常?

非常感謝您對提供的任何幫助。

回答

0

你幾乎回答了你自己的問題,這將是調用DebugBreak()的線程,而這又是由DebugBreakProcess()創建的新線程。

+0

因此,如何解釋一個事實,即通過走這個線程ID的堆棧,我得到了預期的堆棧元素? –

+0

您能否將我鏈接到一個可靠的引用,該引用聲明此ID是作爲DebugBreakProcess()機制的一部分創建的新線程?我找不到。 –

+0

現在需要參考。 達到我的符號解析工作的一個點後,證明我這個dwThreadId是創建的新線程。謝謝。 –

相關問題