2011-04-12 78 views
0

我有一個複雜的系統,有幾個線程。有時我看到100%cpu中的應用程序並強制重新啓動系統。我不知道哪個線程導致了它,以及哪個代碼導致了它。 我需要的東西,會給我在系統中的每個線程的狀態(即現在在哪個線程的線),所以我可以找到哪些代碼導致100%CPUc#線程100%CPU

(在Java中,你有線程轉儲殺死-3它給你每個線程的狀態)

你能幫忙嗎?

+2

是否有任何理由不能使用Visual Studio調試器?它有一個正在運行的線程列表,當你暫停時你可以查看每個線程在源代碼中的位置。 – trickdev 2011-04-12 11:50:41

+0

不要忘記接受一個答案,如果它幫助你。 – 2011-04-26 07:27:16

回答

1

你可以使用調試器打破,然後找出所有線程都在做。 (將調試位置工具欄添加到Visual Studio)

另一種方法是逐個刪除所有線程並找到有罪的線程。

2

以前有人向我建議Process Explorer

+1

有很好的理由。 Process Explorer允許您查看每個線程的CPU使用情況。 (雙擊過程,然後看看線程標籤。)不幸的是,你沒有得到更多的信息.​​.它很可能只是一個起點。 – 2012-07-17 13:49:11

+0

至於我 - 這是第一件要做的事!謝謝你的建議 – chopikadze 2012-11-18 18:37:18

1

我發現在像微軟intellitrace這些日子裏最好的工具之一。這允許歷史調試&會給你所有線程的狀態,當你中斷執行。

不幸的是,它僅在Visual Studio 2010旗艦版中可用,但如果這是一個非常關鍵的問題,並且您沒有這個版本,您可以隨時下載30天的評估版。

1

使用VS調試器附加到您的進程,然後按「break」(暫停符號)來中斷執行。在這種狀態下,您可以打開名爲「線程」的調試窗口,它應該爲您提供每個線程的狀態以及它們當前正在執行的哪一行。它也有助於在調試時爲您的線程提供明確的名稱。

0

我發現99%的時間(至少對我來說)是因爲我不小心做了一個無限循環,當我不打算這樣做,或者應該有至少幾個毫秒的睡眠時間循環繼續。

0

您可以使用類似visual vm的分析器來更好地調試應用程序中的線程行爲。