• Windows 以及 Xcode下编译调试 libcurl 源码


    curl 这个工具大家都很熟悉. 前几天因为要跟踪curl的实现细节, 不得不设法搭建curl的调试工程. 我们分别在windows visual studio 和 mac 上的 xcode 下搭建调试. 这里记录一些细节,分享出来.

    curl 可以在数十个平台上编译运行.
    这是官网地址: http://curl.haxx.se

    请在这里下载源码: http://curl.haxx.se/download.html

    下载解压.

    一. Windows 调试:
    在 windows 上调试比较简单. 自带工程文件.
    直接用 VS2012 打开 projectsWindowsVC11 里面的 工程文件就可以了。
    务必用vs2012 打开。

    直接 F10 就可以单步 到 main 函数。

    二. Mac Xcode 调试.
    我们主要说说 xcode 调试.
    大概是因为 *nix 上的编译比较方便, 所以都是使用 makefile 编译. 所以没有自带工程文件.

    所幸的是, 开源项目 cmake 可以根据 makefile 和配置文件逆向生成工程文件. 而更好的消息是 curl 早期是支持 cmake 的. 所以我们需要修改一下 curl 的配置文件, 并结合 cmake 来逆向生成 它在 xcode 上的工程文件.

    开工.

    1) 需要先安装cmake

    下载 cmake 源码, http://www.cmake.org/files/v3.1/cmake-3.1.0-rc1.tar.gz
    然后解压, 进去: ./configure && make && make install
    一切顺利的话,应该就能成功了。

    2) 生成 makefile

    第二步, 我们需要生成curl 的 makefile. 进入curl的源码目录:

    ./configure  --without-libssh2  --with-darwinssl
    make
    

    说明一下, 我们这里指定了两个参数, 我们不需要 curl 支持 ssh, 所以把”–without-libssh2 ” 排除. 而且”–with-darwinssl” 指定使用 mac 上的 ssl 实现, 而不需要 openssl.

    这样可以减少出错的可能性, 而且, 我们就需要 darwinssl.

    3) 生成 xcode 工程.

    前面几步都没什么特别的, 这一步是关键, 使用 cnamke 逆向生成工程.

    在 curl 的源码根目录中, 有一个文件 “CMakeLists.txt” 这个是逆向生成所必须的配置文件. 这是curl 官方提供的, 但是已经很旧了, 年久失修, 不能工作了.

    我们可以先尝试一下:

    mkdir -p build/xcode
    cd build/xcode
    cmake ../../$CURL -G Xcode
    
    

    说明一下, 创建一个子目录保存工程. 然后使用命令:

    cmake ../../$CURL -G Xcode
    

    来生成工程.

    这一步会报大量的错误在”CMakeLists.txt” 中.

    请使用附件中这个我修改过的版本代替源码中的版本, 然后再重复执行上面的命令生成.
    CMakeLists.txt

    工程文件已经生成了.

    x1

    但是此时打开工程编译不过. 需要先对工程文件做一些修改:
    具体请查看下面的命令.

    sed -i "" "s/OTHER_LDFLAGS = "/OTHER_LDFLAGS = "-framework Cocoa -framework CoreFoundation -framework CoreServices -framework Security -fobjc-link-runtime -framework LDAP/"  CURL.xcodeproj/project.pbxproj
    
    

    在工程中添加了一些 link target. 比较简单. 不多说了.

    现在设置一下 调试工程, 就可以调试了.

    x2

    然后选中 curl 这个target:

    x3

    然后找到 main 函数. 就可以单步调试了:
    x4

    欢迎访问我的个人独立博客: http://byNeil.com

  • 相关阅读:
    关于vue无法侦听数组及对象属性的变化的解决方案
    web js导出csv 文件(使用a标签)
    微信小程序-获取用户信息和openid,session_key,
    H5适配 iponex
    项目使用iconfont图标
    锚点链接,组件库中锚点实现
    前端的调试工具和node调试工具
    前端模块化 CommonJS AMD CMD ES6
    支付宝小程序
    个人创用 UA 列表
  • 原文地址:https://www.cnblogs.com/shuidao/p/4161502.html
Copyright © 2020-2023  润新知