热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

curl这个工具大家都很熟悉.前几天因为要跟踪curl的实现细节,不得不设法搭建curl的调试工程.我们分别在windowsvisualstudio和mac上的xcode下搭建调试

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

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

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

下载解压.

一. Windows 调试:
在 windows 上调试比较简单. 自带工程文件.
直接用 VS2012 打开 \projects\Windows\VC11 里面的 工程文件就可以了。
务必用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

工程文件已经生成了.

,

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

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. 比较简单. 不多说了.

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

,

然后选中 curl 这个target:

,

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

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

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


推荐阅读
  • 对于以压缩包形式发布的软件,其目录中通常包含一个配置脚本 `configure`。该脚本的主要功能是确定编译所需的各项参数,如头文件的位置和链接库的路径,并生成相应的 `Makefile` 以供编译使用。通过运行此脚本,开发者可以确保软件在不同环境下的正确编译与安装。此外,该脚本还能够检测系统依赖项,进一步提高编译过程的可靠性和兼容性。 ... [详细]
  • mac用于开发使用时间长硬盘会越来越小,速度越来越慢的,亦是花了几分钟研究怎么清理系统的缓存,方法:1,到https:www.omnigroup.commore安装OmniDisk ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • 本文介绍了一种支付平台异步风控系统的架构模型,旨在为开发类似系统的工程师提供参考。 ... [详细]
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
  • Manacher算法详解:寻找最长回文子串
    本文将详细介绍Manacher算法,该算法用于高效地找到字符串中的最长回文子串。通过在字符间插入特殊符号,Manacher算法能够同时处理奇数和偶数长度的回文子串问题。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有