嗨,我最近在用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. 如何讓我的應用程序的崩潰位置?
- 3. Android的位置應用程序崩潰
- 4. 應用程序在檢測到應用程序時崩潰
- 5. 崩潰的位置程序
- 6. Adapter.getItem(位置)崩潰應用程序
- 7. 如何檢測線程和崩潰的位置?
- 8. Android - 我如何檢測什麼是崩潰我的應用程序?
- 9. 如何識別應用程序崩潰的位置?
- 10. 如何使用swift檢測應用程序崩潰?
- 11. 的Android應用程序測驗崩潰
- 12. 在Android中檢測應用程序崩潰
- 13. UITableView的崩潰我的應用程序
- 14. ConcurrentModificationException的崩潰我的應用程序
- 15. AdView的崩潰我的應用程序
- 16. 使用.bat檢測崩潰的應用程序
- 17. 如何崩潰的應用程序
- 18. setText崩潰我的應用程序
- 19. 我的應用程序崩潰:layout_below
- 20. android adapter.add()崩潰我的應用程序
- 21. onSaveInstanceState崩潰我的應用程序
- 22. NSTimer崩潰我的應用程序
- 23. admob崩潰我的應用程序
- 24. 我的應用程序不斷崩潰
- 25. LOCAL_SHARED_LIBRARIES崩潰我的應用程序
- 26. 我的應用程序崩潰
- 27. AsyncTask崩潰我的應用程序
- 28. DebugView使我的應用程序崩潰
- 29. 應用程序崩潰時我的drawRect
- 30. android setText崩潰我的應用程序