嗨,我最近在用C編寫的linux項目中。 這個應用程序有幾個進程,它們共享一個共享內存塊...當應用程序運行幾次小時,一個進程崩潰沒有任何足跡,因此很難不知道問題是什麼或在哪裏我可以開始審查代碼....好吧,它可能是內存溢出或指針marused ...但我不知道。 .. 你有任何工具或任何方法來檢測問題... 它將非常感激,如果它得到解決。 thanx爲您的建議...如何檢測我的應用程序在Linux中崩潰的位置
4
A
回答
4
之前啓動該程序,使核心轉儲:
ulimit -c unlimited
(並確保過程的工作目錄是進程可寫)
的進程崩潰後,就應該留下一個core
文件,然後你可以gdb
檢查:
gdb /some/bin/executable core
此外,還可以根據運行過程當你啓動它時 - gdb
會在進程崩潰時喚醒。
1
Valgrind是你需要下一步去的地方。機會是你有一個良性的記憶錯誤問題 - 直到它不是。運行valgrind下的程序,看看它說什麼。
3
如果您正在運行emacs,您也可以在gdb-many-windows中運行gdb。這給你更好的調試選項,可以讓你檢查堆棧等東西。這很像Visual Studio IDE。
這裏是一個有用的鏈接
http://emacs-fu.blogspot.com/2009/02/fancy-debugging-with-gdb.html
0
我同意bmargulies - Valgrind是絕對目前最好的工具來自動檢測不正確的內存使用情況。幾乎所有的Linux發行版都應該擁有它,所以只需emerge valgrind
或apt-get install valgrind
或任何發行版使用。然而,Valgrind並不是存在的最神祕的東西,它通常只能幫助你判斷程序最終是以什麼方式錯誤地訪問內存 - 如果你在一個變量中存儲了一個不正確的數組索引,然後在之後訪問這個數組,那麼你仍然必須弄清楚。特別是在與GDB這樣強大的調試器配對時(然而,backtrace
或bt
命令是你的朋友),Valgrind是一個非常有用的工具。
只要記住用-g
標誌進行編譯(如果您至少使用GCC),或者Valgrind和GDB將無法告訴您在源中發生內存濫用的位置。
相關問題
- 1. 如何檢測線程和崩潰的位置?
- 2. Android - 我如何檢測什麼是崩潰我的應用程序?
- 3. 如何使用swift檢測應用程序崩潰?
- 4. AdView的崩潰我的應用程序
- 5. 在NSURLConnection中崩潰的應用程序
- 6. popViewControllerAnimated:YES崩潰我的應用程序
- 7. 我的應用程序不斷崩潰
- 8. UILabels崩潰我的應用程序
- 9. resignfirstresponder崩潰我的ios應用程序
- 10. LOCAL_SHARED_LIBRARIES崩潰我的應用程序
- 11. super.viewDidLoad()崩潰我的應用程序
- 12. asihttprequest崩潰我的應用程序
- 13. admob崩潰我的應用程序
- 14. 意圖崩潰我的應用程序
- 15. Android setContentView崩潰我的應用程序
- 16. OnClick崩潰我的應用程序
- 17. 我的應用程序不斷崩潰
- 18. 檢測並重新啓動崩潰的.NET應用程序
- 19. Android位置管理器在調用時崩潰應用程序
- 20. 我們的應用程序崩潰 - 如何找到崩潰的原因?
- 21. 我的OpenGL位圖程序崩潰了?
- 22. 我的應用程序崩潰當我在arraylist中加載大量的位圖
- 23. 如何在應用程序崩潰時捕獲崩潰
- 24. 發送位置,設備崩潰的應用程序(機器人)
- 25. 如何編程崩潰nodejs應用程序(用於測試)
- 26. 如何檢測我的應用程序的位置服務禁用?
- 27. 訪問崩潰應用程序崩潰應用程序內ios
- 28. 當位置服務設置爲「開」時,應用程序崩潰
- 29. 爲什麼我的64位C++應用程序崩潰?
- 30. 在Testflight beta測試中測試時應用程序已崩潰