Clion:

2016-11-16 9 views
9

मैं Clion 2016/02/02 उपयोग कर रहा हूँ और मैं libtins पुस्तकालय में एक विधि डिबग करने के लिए चाहते हैं स्रोत फ़ाइलें जोड़कर बाहरी पुस्तकालयों की डीबगिंग सक्षम करें। हालांकि, ऐसा लगता है कि स्रोत उपलब्ध नहीं हैं क्योंकि libtins से विधियों में कूदने का प्रयास करते समय, डीबगर नहीं जाता है और वर्तमान दृश्य को अपडेट करता है।Clion:

मैं include_directories("/home/patrick/libtins/") या include_directories("/home/patrick/libtins/src/") जोड़ने जबकि libtins libtins भंडार से क्लोन रूट फ़ोल्डर है द्वारा this post में सुझाव का पालन करने की कोशिश की। लेकिन CLion अभी भी libtins पुस्तकालय से जुड़े स्रोत फ़ाइलों को नहीं मिला।

मेरे CMake फ़ाइल के रूप में पालन दिखता है:

project(myproject) 

# Define CMake settings 
cmake_minimum_required(VERSION 3.2) 

IF(NOT CMAKE_BUILD_TYPE) 
    SET(CMAKE_BUILD_TYPE "Release") 
ENDIF() 

IF (CMAKE_BUILD_TYPE MATCHES Debug) 
    MESSAGE(STATUS "Running Debug configuration.") 
ELSEIF (CMAKE_BUILD_TYPE MATCHES Release) 
    MESSAGE(STATUS "Running Release configuration.") 
ENDIF() 

SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall") 
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall") 

SET(CMAKE_CXX_STANDARD 11) 
SET(CMAKE_CXX_STANDARD_REQUIRED ON) 

# Add the library source files 
SET(SOURCE_FILES cxx/myclass.cpp cxx/myclass.h) 

# Include SQLiteCpp library and build it 
option(SQLITECPP_RUN_CPPLINT OFF) 
include_directories(SQLiteCpp/include) 
add_subdirectory(SQLiteCpp) 

# Find libtins library 
FIND_LIBRARY(TINS_LIBRARY tins) 
IF(TINS_LIBRARY) 
    MESSAGE(STATUS "Tins library found in ${TINS_LIBRARY}") 
ELSE() 
    MESSAGE(FATAL_ERROR "Tins library not found.") 
ENDIF() 

FIND_PACKAGE(PythonLibs 3.0 REQUIRED) 
IF(PYTHONLIBS_FOUND) 
    INCLUDE_DIRECTORIES("${PYTHON_INCLUDE_DIRS}") 
ELSE() 
    MESSAGE(FATAL_ERROR "Unable to find Python libraries.") 
ENDIF() 

# Find and configure BOOST library 
FIND_PACKAGE(Boost 1.54 QUIET) 
IF (Boost_FOUND) 
    INCLUDE_DIRECTORIES("${Boost_INCLUDE_DIRS}") 
    SET(Boost_USE_STATIC_LIBS OFF) 
    SET(Boost_USE_MULTITHREADED ON) 
    SET(Boost_USE_STATIC_RUNTIME OFF) 
    # Find the boost python 3 component 
    SET(PYTHON_VERSIONS python3 python-py35 python-py34 python-py33 python-py32) 
    FOREACH(VERSION ${PYTHON_VERSIONS}) 
     FIND_PACKAGE(Boost COMPONENTS ${VERSION} QUIET) 
     IF(Boost_FOUND) 
     MESSAGE(STATUS "Python Boost found as '${VERSION}'.") 
     BREAK() 
     ENDIF() 
    ENDFOREACH(VERSION) 
    IF(NOT Boost_FOUND) 
     MESSAGE(FATAL_ERROR "Python Boost component not found.") 
    ENDIF() 
ELSE() 
    MESSAGE(FATAL_ERROR "Unable to find the Boost libraries (version 1.54 or higher).") 
ENDIF() 

SET_target_properties(sqlite3 PROPERTIES POSITION_INDEPENDENT_CODE ON) 

ADD_EXECUTABLE(myproject ${SOURCE_FILES} "/home/pjattke/libtins/") 
TARGET_LINK_LIBRARIES(myproject ${Boost_LIBRARIES} "${TINS_LIBRARY}" SQLiteCpp sqlite3 pthread dl) 

वास्तव में क्या मैं Clion स्रोत फ़ाइलें डीबगिंग के लिए उपलब्ध बनाने के लिए परिवर्तन करना होगा?

उत्तर

3

यह अगर libtins डिबग जानकारी के बिना बनाया गया है हो सकता है। आप इसे कैसे बनाते हैं?

यह मोटे तौर पर किया जाना चाहिए निम्नलिखित:

mkdir build 
cd build 
cmake -DCMAKE_BUILD_TYPE=Debug ../ 
make 
1

सबसे आसान तरीका ऐसा करने के लिए libtins अपनी परियोजना में सीधे निर्माण करना है। libtins can also be built with CMake के बाद से, सबसे तेज़ तरीका है आप ऐसा करने के लिए

add_subdirectory(libtins) 

साथ अपनी परियोजना में अपने स्रोत निर्देशिका libtins source युक्त एक निर्देशिका libtins कहा जाता है जोड़ने के लिए, और शामिल यह इसके लिए आपको पूरा करने के लिए की आवश्यकता होगी Libtins के dependencies भी।

उसके बाद, आप, अब और FIND_LIBRARY(TINS_LIBRARY tins) की जरूरत नहीं है, क्योंकि यह पहले से ही अपनी परियोजना में मौजूद है। यह निम्नलिखित लिंक करने के लिए चाल करना चाहिए:

TARGET_LINK_LIBRARIES(myproject ${Boost_LIBRARIES} tins SQLiteCpp sqlite3 pthread dl) 

मत भूलना पहले से tins निर्देशिका शामिल करने के लिए:

include_directories(libtins/include/tins) 

इस के बाद, जब आप डिबग मोड में अपने कार्यक्रम चलाने के लिए, libtins तरीकों चाहिए यह भी उपलब्ध होगा क्योंकि यह आपके प्रोजेक्ट में समान रूप से बनाया गया था।

ध्यान दें कि मैं एक और रणनीति का चयन होगा यदि आप एक लंबे समय में अपनी परियोजना में libtins शामिल करना चाहते हैं चाहिए। फिर, मैं ExternalProject_Add command के साथ समाधान की तलाश करूंगा।

+3

गंभीरता से? बाहरी पुस्तकालयों में डीबगिंग के लिए यूएल अनुमोदित समाधान (जिसमें डीबग-जानकारी स्थापित है) पुस्तकालय को अपनी परियोजना के हिस्से के रूप में बनाना है? मैं शायद ही इतना आसान कहूंगा। मुझे भी CLion के साथ यह समस्या है - मुझे पता चला है कि अगर gdb लाइब्रेरी स्रोत ढूंढ सकता है, तो भी CLion नहीं कर सकता है। –

+0

@ जॉन कॉल्कोट अपनी परियोजना के हिस्से के रूप में लाइब्रेरी का निर्माण सुनिश्चित करता है कि आपके पास प्रोजेक्ट के अन्य हिस्सों (यहां, डीबग) के समान संकलन झंडे हैं। तो, हाँ, CLion इसे पायेगा, और, हाँ, मैं इसे इतना आसान कहूंगा। आप किसी भी मामले में स्थापित होने के लिए डीबग-जानकारी पर भरोसा नहीं कर सकते हैं। – oLen

+0

@JohnCalcote 100% सही है। ज्यादातर मामलों में, यह बाहरी निर्माण को पूरी तरह से फिर से करने का सुझाव देने के लिए पागल है। अधिकांश परियोजनाओं में बेहद जटिल बिल्ड सिस्टम होते हैं, और यह सुझाव देते हुए कि आप इसे अपने स्वयं के निर्माण प्रणाली में आकस्मिक रूप से छोड़ देते हैं, वह यथार्थवादी नहीं है। –

0

निम्नलिखित Clion 2017/03/03 के साथ Ubuntu 16.04.3 LTS में मेरे लिए काम किया।

सबसे पहले आप Clion उबंटू के मूल (यकीन नहीं क्यों) के साथ gdb बंडल को बदलने के लिए:

$ cd ~/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/173.4548.31/bin/gdb/bin 
$ mv gdb gdb_original 
$ ln -s /usr/bin/gdb gdb 

तो पुस्तकालय कोड में कदम से पहले एक ब्रेकपाइंट रखने डिबगिंग सत्र शुरू करते हैं।

जब निष्पादन अपने ब्रेकप्वाइंट पर रोका जाता है, GDB सांत्वना टैब पर जाएँ और पूरा पथ जहां स्रोत कोड डिबग बसता था होना करने के लिए करने के लिए इस ओर इशारा करते निष्पादित।

(gdb) dir /full/path/to/openssl-1.0.2g/crypto/bio 

क्योंकि BIO_newbio_lib.c जो पिछले फ़ोल्डर में रहता है में लागू किया जाता है: उदाहरण के लिए, OpenSSL के BIO_new समारोह मैं करना था डिबग करने के लिए।

अब आप अपने लाइब्रेरी कोड में जा सकते हैं।

संबंधित मुद्दे