V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pagict
V2EX  ›  C

如何设置为 debug

  •  
  •   pagict · 2017-04-03 00:06:56 +08:00 · 2687 次点击
    这是一个创建于 2817 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在尝试写一个 cpp 的库,生成一个 library ,用 cmake 管理项目,该如何设置,可以在 project 里面的 test 中 debug 进库的代码? Clion !!
    8 条回复    2017-05-22 23:48:58 +08:00
    waruqi
        1
    waruqi  
       2017-04-03 00:45:06 +08:00
    也可以考虑下使用 xmake 直接 xmake run -d test 自动编译运行 加载调试器 然后调试代码 http://xmake.io/cn
    skydiver
        2
    skydiver  
       2017-04-03 01:28:59 +08:00 via Android
    cmake -DCMAKE_BUILD_TYPE=Debug 或者 RelWithDebInfo
    MCVector
        3
    MCVector  
       2017-04-03 02:26:06 +08:00 via Android
    在你的 GCC flag 里加 -g
    taozhijiangscu
        4
    taozhijiangscu  
       2017-04-03 11:02:18 +08:00
    也可以 CMakeLists.txt 中

    set(CMAKE_BUILD_TYPE Debug)
    wwqgtxx
        5
    wwqgtxx  
       2017-04-03 12:03:17 +08:00 via iPhone   ❤️ 1
    clion 默认的编译模式不就是 debug 么
    pagict
        6
    pagict  
    OP
       2017-04-03 15:06:19 +08:00 via iPhone
    @skydiver @MCVector @taozhijiangscu @wwqgtxx
    楼上各位所说的 是针对我的 test executable 的 debug 设置吧,可以 调试我的测试程序,但是无法调试进自己的库代码。如何设置进入库代码调试呢
    taozhijiangscu
        7
    taozhijiangscu  
       2017-04-03 21:27:20 +08:00
    @pagict

    那得看你的库本身有没有调试符号了啊
    pagict
        8
    pagict  
    OP
       2017-05-22 23:48:58 +08:00
    擦,原来这个坑空了快两个月了。这两个月实在各种杂事。自己来个阶段小结。

    再进一步描述一下,是在 Clion 里的项目,结构形如
    ---
    |--src1.cpp
    |--src2.cpp
    |--...
    |__test/
    |-- test_me.cpp

    test 用了 gtest,想要调试的是一个在 header 中的 template 函数。

    昨天在 clion 里把 debugger 由 lldb 改为 bundled gdb,可以调试进去了。猜想是 lldb 不支持 template 调试所致?
    然而,今天进一步做实验,把这个猜想打破了,再次混沌。
    今天索性全部 cmd 手工来编译,调试。把编译好的 mylib.so 和调试信息文件夹 mylib.so.dSYM 拷入 test 文件夹,-g 编译 test。用 lldb 调试,打断点 my_class::debug_this_template_func 可以顺利定位,run 起来也可以在这里停住。
    反倒是用 gdb (先花了点时间做 codesign ),打断点 my_class::debug_this_template_func 就提示“ Make breakpoint pending on future shared library load?”,当然选 yes,run 起来却还是一跑而过,直接到了 segmentation fault 了。

    所以呢,到底是不是由于调试器的原因呢,还得继续调查下去。虽然题主原本的问题是已经解决了。在这里先小结一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1012 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:10 · PVG 04:10 · LAX 12:10 · JFK 15:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.