2010-09-08 57 views
1

有人請給我一個關於如何在Symbian中獲取堆棧跟蹤的提示。我遇到KERN-EXEC 0恐慌,但找不到它的起源。我已經看到其他的SO問題,比如this,但是隻有關於如何在模擬器上解決這個問題的描述。但我的程序處理Wi-Fi,必須在設備上運行。也許有一些方法讓堆棧在恐慌中被追蹤或破解?Symbian:如何在設備上運行時獲得堆棧跟蹤恐慌?

回答

1

我有哪些,操作系統讓你沒有任何幫助了同樣的問題。

我做了什麼,這解決了我的問題,實際上有很大幫助,它要拿出自己手工堆棧跟蹤落實。請參閱我的版本here的部分內容(這恰好與您所鏈接的問題相同)。

我的回答有很多的優點和缺點。

  • Pro - 你會得到一個很好的堆棧跟蹤,這在調試過程中有很大幫助。
  • 大量的手動工作來實施和維護。
  • Con - 可能會導致性能下降(我設置了它,所以它只能被編譯用於調試版本)。
+0

感謝您的回答。我已經使用這種技術('__PRETTY_FUNCTION__'和堆棧對象)來跟蹤我的代碼的一些部分。但是我的代碼庫相當龐大,將追蹤調用添加到每個函數中會很痛苦(並且肯定會減慢執行速度,由於大量日誌,速度已經很低了)。 – Haspemulator 2010-09-09 03:10:07

+0

性能是爲什麼我只在調試編譯中啓用它,而不是釋放編譯。你說得對,這是一個痛苦,但這是我追蹤我的一些執行錯誤的唯一方法,所以我認爲這是值得的。一旦完成就位,這只是保持它的一個問題。 – 2010-09-09 08:53:02

1

KERN-EXEC 0意味着你使用的是壞的手柄,所以檢查所有RClasses。

不能調試系統崩潰生產設備上。如果你可以爲你的設備構建一個自定義ROM,那麼你可以包含內核擴展名「exmondebug.dll」和「exmoncommon.dll」,現在當設備崩潰時它會將你放到調試監視器中。從這裏你可以輸入密碼「替換」轉儲出所有的系統堆棧等。(輸入幫助信息)。

如果您無權訪問開發人員硬件,則可以在QEMU上運行自定義的Symbian^2和Symbian^3 ROM映像,其中Syborg baseport,我不認爲它具有WiFi支持,但有一個以太網驅動程序。

+0

感謝您的回答。我相信在大多數情況下,這是一個好方法:使用操作系統,開發人員硬件或仿真器,並使用您需要的選項運行它。但是,不幸的是,由於以下幾個原因,我不可能:1.我的代碼不能在Symbian^3上編譯(使用一些不推薦使用的API)。 2.我的問題只能在特定條件下重現(手機應處於離線模式,並且wi-fi適配器硬件應連續打開和關閉幾次)。但是,儘管如此,感謝指導,也許它會幫助我解決其他調試問題。 – Haspemulator 2010-09-09 03:03:27

0

不要你的日誌給你一個提示? 在崩潰的地方添加更多日誌,或者註釋掉某些塊以查看是否發生崩潰。

+0

不幸的是,沒有。我的程序以異步方式工作,並且有很多活動對象同時運行。我試圖將它們全部記錄下來,但仍然取得成功 - 在其他地方出現錯誤。看來,唯一的工作決定是真正記錄每個功能的入口和出口...... – Haspemulator 2010-09-09 09:49:13