使用slickedit调试开源代码

2023-11-17

slickedit linux下的神器啊!

阅读代码堪比 source insight,调试代码堪比 visual studio。

nginx优秀的web服务器。

因为其具有多进程、后台进程的特点,因此本文选择以此为例讲解slickedit如何对开源代码进行调试。

 

一、调试环境

ubuntu 14.04 + slickedit pro 2016 + nginx 1.7.9

 

二、编译nginx

对nginx完成一次编译,开源软件的套路一般都是 ./configure --xxx=xxx 后生成makefile,然后make即可。

注意这里生成的makefile很关键,后面slickedit启动调试后会用到。

配置要使用debug版本,不同的开源软件配置也不一样。一般都是:不使用优化选项、不使用strip、加-g选项。

如果调试过程中,代码行乱跳一般都是打开了优化选项。

 

三、建立工程

选择用户自定义makefile,其他根据向导完成即可。并导入nginx源码。

菜单 project->project properties...

注意 这里有很多东西可以配置。

 

四、调试配置

虽然slickedit提供了界面进行配置,但是时灵时不灵的,很让人头疼。具体原因也没有查明。

但是通过其工程的配置文件却很好使。

在我们建立的工程目录里有一个*.vpj文件,我这里是nginx.vpj。

修改方法如下:

到了这一步,我们终于可以启动调试了。F9加断点、F5启动调试,快捷键的配置和vs基本一直。

启动后的效果如下:

 

在build窗口(view->tool window->build)可以看到其执行过程

1、进入源码路径 执行了make。因此nginx要提前配置好生成makefile,否则这里就会提示找不到makefile。

      cd /work/sdb/opensrc/nginx/nginx-1.7.9

2、启动调试命令。 

     /opt/slickedit-pro2016/bin/vsdebugio -port 8001  -prog
     /work/sdb/opensrc/nginx/bin/sbin/nginx -c   /work/sdb/opensrc/nginx/bin/conf/nginx.conf

这个2个关键的命令我们在第四步进行了配置。

如果启动不成功,也可以根据这里的提示信息,进行问题的解决。

 

五、调试子进程

slickedit 默认是进入主进程进行调试,对于nginx这种多进程的模式,如果想要调试子进程,可以通过命令行进行修改。

slickedit封装了gdb,支持gdb所有的命令。

鼠标单击slickedit的底部就可是输入命令:debug_send_command set follow-fork-mode child

debug_send_command 是slickedit的命令

set follow-fork-mode child 是gdb命令

如下图:

 

六、调试运行中进程

菜单 debug->attach debugger->attach to ranning process (gdb)...

配置如下:

点击ok,slickedit就attach到nginx work process这个进程了。

补充一点:
如果建立的slicedit工程,和makefile文件不在同一目录,还需修改
*.vpj文件中 Name="Build" 栏目下的 RunFromDir字段 该路径包含我们项目的makefile文件。
也就是说当按下F5进行调试时,先执行了build栏目下的命令,再执行debug栏目的下的命令。

全文完。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用slickedit调试开源代码 的相关文章

  • 如何在运行 NGINX Docker 容器的 AWS EC2 上启用 HTTPS?

    我在 AWS 上有一个运行 Amazon Linux 2 的 EC2 实例 在上面 我安装了 Git docker 和 docker compose 完成后 我克隆了我的存储库并运行docker compose up让我的生产环境启动 我访
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • 我可以在 Nginx Conf 中添加多少个服务器块

    知道我可以在 Nginx 配置中添加多少个服务器块吗 我需要将它用于具有多个子域的反向代理 每个客户端一个子域 它能成功支持 10 000 个服务器块吗 有没有相关的基准研究 这实际上并不是一个你有多少人的问题can但你有多少 能够妥善处理
  • 为什么 GDB 启动一个新的 shell 以及如何禁用此行为?

    我正在解决一个问题 即从 GDB 启动应用程序会导致符号查找错误 但从 shell 启动它却可以 事实证明 每当你从 GDB 中启动一个程序时 它都会启动一个新的 shell 从而覆盖我在启动 GDB 之前设置的所有环境变量 例如LD LI
  • Ubuntu 12.04 上的 PHP 从 5.3 升级到 php 5.6

    我正在按照本教程将 php 从版本 5 3 升级到 5 6 http phpave com upgrade php 53 to php 56 on ubuntu 1204 lts http phpave com upgrade php 53
  • 错误:NVIDIA-SMI 失败,因为无法与 NVIDIA 驱动程序通信

    NVIDIA SMI 抛出此错误 NVIDIA SMI 失败 因为无法与 NVIDIA 通信 司机 确保安装了最新的 NVIDIA 驱动程序并且 跑步 我清除了 NVIDIA 并按照提到的步骤重新安装了它here https askubun
  • 如何在 Linux 主机上的 docker 容器中挂载目录 [重复]

    这个问题在这里已经有答案了 我想将一个目录从 docker 容器挂载到本地文件系统 该目录是网站根目录 我需要能够使用任何编辑器在本地计算机上编辑它 我知道我可以跑docker run v local path container path
  • 使用nginx容器作为反向代理时的原始url

    我有一个 Web 应用程序部署为码头集装箱 我也有一个nginx容器 使用dnsmasq解析器 设置为充当 Web 应用程序前面的反向代理 它的 80 端口映射到主机 我的应用程序使用 SSO 身份验证 当我使用身份提供商登录时 回调 ur
  • gdb 不会从外部架构读取核心文件

    我正在尝试在 Linux 桌面上读取 ARM 核心文件 但似乎无法找出我的核心文件 有什么方法可以指示 gdb 我的核心文件是什么类型吗 file daemon daemon ELF 32 bit LSB executable ARM ve
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • gcc 中 -g 选项的作用是什么

    我看到很多关于 gdb 的教程要求在编译 c 程序时使用 g 选项 我无法理解 g 选项的实际作用 它使编译器将调试信息添加到生成的二进制文件中 此信息允许调试器将代码中的指令与源代码文件和行号相关联 拥有调试符号可以使某些类型的调试 例如
  • 为 Qt 应用程序创建 Linux 安装

    我刚刚用 Qt Creator 制作了一个很棒的程序 我对自己很满意 如何将其从台式机移至笔记本电脑 那么 最好的方法是安装程序 对吗 对于 Ubuntu 这是一个 Debian 软件包 对吗 我怎么做 有人这样做过吗 他们可以分享 QT
  • 操作错误:尝试在 ubuntu 服务器中写入只读数据库

    我正在使用 FlaskApp 运行mod wsgi and apache2在 Ubuntu 服务器上 我尝试运行烧瓶应用程序localhost成功 然后部署到ubuntu服务器上 但是当我尝试更新数据库时 出现错误 Failed to up
  • Nginx - Heroku Docker - 是否可以在 Heroku 上运行 Nginx 作为反向代理

    我试图弄清楚如何使用 Nginx 在 Heroku 应用程序上构建反向代理 问题是 Heroku 似乎每个应用程序只接受一个容器 但我的应用程序系统至少会使用三个容器 一个用于 Nginx 一个用于我的应用程序前端 一个用于我的业务逻辑服务
  • 如何将整个 GDB 会话转储到文件中,包括我输入的命令及其输出?

    在 bash 中 我可以使用script命令 它将 shell 上显示的所有内容转储到文件中 包括 键入的命令 PS1 line 命令的 stdout 和 stderr gdb 中的等效项是什么 我试着跑shell script从 GDB
  • 如何使用gunicorn和bokeh服务配置Nginx

    我想提供一个 Flask 应用程序 该应用程序使用本地网络服务器上的嵌入式散景服务 为了说明这一点 我使用了一个例子散景服务示例 https github com bokeh bokeh blob 0 12 11 examples howt
  • 在 docker 中将 pgadmin 连接到 postgres

    我有一个docker compose与服务文件python nginx postgres and pgadmin services postgres image postgres 9 6 env file env volumes postg
  • 我需要启用哪些权限才能使 Docker 卷正常工作?

    假设我有一个保存一些数据的 Docker 容器 我希望这些数据能够持续存在 如果容器被停止 删除 升级等 我仍然希望数据位于主机操作系统文件系统上的可访问位置 目前 我的解决方案是创建一个目录 srv service name在我的主机上
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • Logrotate - nginx 日志不在 docker 容器内旋转

    我有一个运行 nginx 的 docker 容器 它正在将日志写入 var log nginxLogrotate 安装在 docker 容器中 并且 nginx 的 logrotate 配置文件已正确设置 尽管如此 logrotate 仍不

随机推荐

  • 江科大自化协STM32学习笔记(部分C语言知识、STM32简介和GPIO口的使用)

    本篇文章是根据B站UP主江科大自化协的教学视频STM32入门教程 2023持续更新中 在了解 学习与实操后整理的学习笔记 内容部分来自UP主的课程资料 并包含了一些个人的理解 如有谬误欢迎指正 详细知识点可以观看UP主的视频进行了解 希望大
  • php如何读取解析eml文件以及生成网页的示例分享

    这篇文章主要介绍了PHP读取 解析eml文件及生成网页的方法 结合实例形式分析了PHP操作eml文件的读取 解析 转换等相关实现技巧与注意事项 并附带demo源码供读者下载参考 需要的朋友可以参考下 本文实例讲述了PHP读取 解析eml文件
  • Linux及Windows下编译exosip和osip2源码

    eXosip库及编译流程简介 1 eXosip库的简介 1 1 osip简介 osip2是一个开放源代码的sip协议栈 是开源代码中不多使用C语言写的协议栈之一 它具有短小简洁的特点 专注于sip底层解析使得它的效率比较高 但缺点也很明显
  • 前端通过FormData上传文件到服务器端

    前端代码 html
  • Win 11 打开未知文件/打开方式 该文件没有与之关联的应用来执行该操作。请安装应用,若已经安装应用,请在“默认应用设置”页面中创建关联。

    问题 鼠标右键选中文件 打开方式 或者选择其他应用 弹窗提示 该文件没有与之关联的应用来执行该操作 请安装应用 若已经安装应用 请在 默认应用设置 页面中创建关联 打开注册表 查看是否存在以下路径 HKEY CLASSES ROOT Unk
  • Visual Studio Code如何打开多个tab标签

    原创 Visual Studio Code如何打开多个tab标签 SweetTool的专栏 CSDN博客 在打开文件夹预览的模式下VS Code默认单击打开文件时仅保存一个tab 例如当前window打开一个tabA 然后点击另外一个文件B
  • 带你了解ES6 Module

    1 commonJS 在说 es6 模块以前 我们先来看一下后端普遍使用的打包方式 commonJS的一些特性 同步加载 也就是串行执行 后面的任务要等到前面任务执行完才能继续执行 语法 commonJS中使用 require 引入 mod
  • [Paper-CV] ECCV 2012 papers 1

    http applesun0757 blog 163 com blog static 18737419220126702145274 Paper CV ECCV 2012 papers 1 2012 07 07 00 21 45 分类 Pa
  • linux中替换命令详解,linux中tr命令详解 (替换,删除d,缩减s)

    tr用来从标准输入中通过替换或删除操作进行字符转换 tr主要用于删除文件中控制字符或进行字符转换 特别要注意一点 tr 只能进行字符的替换 缩减和删除 不能用来替换字符串 最常用选项的tr命令格式为 tr c d s string1 to
  • C# 网络编程之Tcp实现客户端和服务器聊天

    最近使用Socket网络套接字编程中 在同步与异步通讯中客户端与服务器总是无法响应 但在学习Tcp协议编程中完成了通讯聊天功能 下面简单讲讲我最近学到的及Tcp聊天的源代码及详细注释 Tcp协议是一个传输层的协议 在Tcp协议编程中它通常使
  • OpenGL超级宝典 纹理(一)

    文章目录 纹理 创建并且初始化纹理 更新纹理数据 从着色器中读取数据 采样器类型 控制纹理数据的读取方式 创建采样器对象和绑定到纹理单元 纹理过滤 设置过滤器 加载纹理 完整代码展示 shader vertex shader fragmen
  • mysql 授权管理和设置

    1 给指定数据库增加所有权限 所有库即 GRANT ALL PRIVILEGES ON TO 用户名 IDENTIFIED BY 密码 WITH GRANT OPTION 设置完之后更新权限表 FLUSH PRIVILEGES 2 给用户增
  • C++11模板元编程-std::enable_if示例详解

    文章目录 1 限制模板函数的参数类型 2 模板类型偏特化 传送门 gt gt AutoSAR实战系列300讲 糖果Autosar 总目录 C 11中引入了std enable if函数 函数原型如下 template lt bool B c
  • AI+数据安全,探索数据安全防护新手段

    随着 4G 正式商用 带宽将不再是数据传输的瓶颈 人类社会真正意义的进入了以手持终端 各类传感器为代表的移动互联网 万物互联 人工智能时代 我们将不再受限于地理位置 可尽情享受着手机购物 电子支付 媒体社交 个性化推送 VR等各种便捷和个性
  • 计算机图形学十五:基于物理的渲染(蒙特卡洛路径追踪)

    蒙特卡洛路径追踪 摘要 1 蒙特卡洛积分 Monte Carlo Integration 2 蒙特卡洛路径追踪 Monte Carlo Path Tracing Reference 本篇文章同步发表于知乎专栏 https zhuanlan
  • PHP与JSON的一些常用操作

    PHP把数据写入JSON文件 PHP读取JSON数据
  • C++ 抽象类

    抽象类 接口 接口描述了类的行为和功能 而无需完成类的特定实现 C 接口时通过抽象类实现的 设计抽象类的目的 是为了给其他类提供一个可以继承的适当的基类 抽象类本类不能被用于实例化对象 只能作为接口使用 注意 如果试图实例化一个抽象类的对象
  • 对象的初始化和清理

    对象的初始化和清理 构造函数和析构函数 对象的初始化和清理也是两个非常重要的安全问题 一个对象或者变量没有初始状态 对其使用后果是未知 同样的使用完一个对象或变量 没有及时清理 也会造成一定的安全问题 c 利用了构造函数和析构函数解决上述问
  • visual studio2019创建解决方案,并在一个解决方案中包含多个项目

    系列文章目录 文章目录 系列文章目录 前言 一 使用步骤 前言 之前一直使用visual studio2019一直都是一个解决方案 下面包含一个工程 这次写一个网络同步的模块 具体使用boost的asio模块 我们需要建立一个解决方案 一个
  • 使用slickedit调试开源代码

    slickedit linux下的神器啊 阅读代码堪比 source insight 调试代码堪比 visual studio nginx优秀的web服务器 因为其具有多进程 后台进程的特点 因此本文选择以此为例讲解slickedit如何对