2015-02-23 42 views
0

我使用科學的linux。我正在用大量的cpp文件處理C++中的大量代碼。現在,它編譯成功,但我得到的價值/數據絕對是錯誤的。此外,我對代碼所做的一些小改動會導致seg錯誤。gdb程序退出代碼01使用CMake程序

在目錄user/project/Build中,我輸入make來編譯和鏈接所有的cpp文件。然後我得去user/project/Build/bin/project通過鍵入user/run/run.sh

當我去到目錄/user/project/Build/bin運行項目二進制文件,然後鍵入gdb project然後run,我看到 Program exited with code 01. Missing separate debuginfos, use: debuginfo-install glibc..

如果我嘗試設置一個斷點,這樣的由break test.cpp:19,我得到的消息No source file named test.cpp. Make breakpoint pending on future shared library load? 但我清楚地有一個名爲test.cpp的源文件

如何設置斷點?考慮到我是Unix的初學者,我應該使用另一個IDE,比如emacs或Qt創建者嗎?

+0

要按行號設置斷點,需要將'-g'選項傳遞給C++編譯器。這裏有一個問題/答案,說明如何做到這一點的典型案例:[用cmake編譯幷包含調試信息](http://stackoverflow.com/a/8447957/2554472) – 2015-02-24 16:35:21

+0

在我的'Build'目錄中,我輸入了' cmake -DCMAKE_BUILD_TYPE:STRING =調試../ src'。但我得到的輸出是「尋找pthread_create - 找不到。 - Found Threads:TRUE CMake Error at log4cplus/CMakeLists.txt:152(SetupBoost): 未知的CMake命令「SetupBoost」。 - 配置不完整,發生錯誤! – user4352158 2015-02-24 18:01:51

+0

好的。所以你通常運行'cmake ../ src'並且工作正常? – 2015-02-24 18:06:55

回答

0

您是否閱讀過GDB的documentation?閱讀它絕對是值得的。也有一些tutorial請仔細閱讀gdb

如果被cmake的產生的Makefile -s,你也應該學習documentation of cmakemakedocumentation。有關相關問題,另請參閱this answer

你有沒有編譯所有軟件與g++ -Wall -g(和沒有任何優化標誌像-O1-O2) - 或-g甚至-g3呢?

你甚至可以安裝調試正在使用的主要圖書館的變種(如包,比如glibc-debuginfo等)

你可能想指定(對於gdb)的源目錄與gdbdir command搜索...

是的,我推薦使用emacs。但最重要的是,我強烈建議花費幾個小時(甚至幾天甚至幾周)來學習更多關於Linux和其上的軟件開發(有很多書籍,網站,tutorialsother培訓......)。也許從一個像Hello程序這樣的小世界開始吧(學習如何用g++進行編譯並用gdb進行調試)。然後嘗試編譯和調試一個你喜歡的小型(例如十萬行源代碼)免費軟件(例如fishshell或你從sourceforgegithub獲得的任何東西),以便了解這種軟件是如何構建的。

如果您正在使用(或改善)大科學的軟件,它可能有一些社區網站,郵件列表或論壇求助(見geantkivaaster作爲例子,這是我唯一的名字知道的!)。也請使用它們。

PS。這主要不是選擇工具的問題:你使用的是好的(GCC即g++,emacs,gdb,make, grepack, etags,git,awk,....)。獲得知識的時間是很重要的 - 需要數週或數月的時間 - 關於如何明智地使用它們併合並它們的使用。另見this & that

+0

如果它只有十幾個人工作的代碼,它不是一個巨大的代碼,中等大小。 GCC編譯器,Linux內核,mozilla瀏覽器或GEANT4仿真代碼擁有數百萬行代碼(每個代碼由幾百人開發)。如果沒有圍繞該代碼的社區,你應該開始一個! – 2015-02-24 22:49:50

+0

你真的應該編輯你的問題,通過更多的解釋來提高他們,並給予更多的背景。至少用幾句話解釋你的代碼在做什麼,它是如何組織的(如果是這樣的話)等等。 – 2015-02-24 22:55:15

相關問題