note

本文将弥补之前的遗漏部分。

continue

前面提到,当设置断点后,使用stepnextfinish,程序会停下来,需要程序继续运行,键入continue, 程序可自动继续向下执行.

设置断点

(lldb) breakpoint set --line 14
Breakpoint 1: where = demo`main + 151 at demo.cpp:14:9, address = 0x0000000000401277

运行程序

(lldb) run
Process 82513 launched: '/home/xx/demo/libevent_demo/demo' (x86_64)

程序停下来了

Process 82513 stopped
* thread #1, name = 'demo', stop reason = breakpoint 1.1

继续执行

(lldb) continue

完整输出

(lldb) breakpoint set --line 14
Breakpoint 1: where = demo`main + 151 at demo.cpp:14:9, address = 0x0000000000401277
(lldb) run
Process 82513 launched: '/home/xx/demo/libevent_demo/demo' (x86_64)
ABCDEF var_a=1 the print following is from call's output ---------------------------- Process 82513 stopped
* thread #1, name = 'demo', stop reason = breakpoint 1.1
frame #0: 0x0000000000401277 demo`main(argc=1, argv=0x00007fffffffde88, env=0x00007fffffffde98) at demo.cpp:14:9
11 std::cout << "var_a=" << var_a << "\n\n";
12
13 std::cout << "the print following is from call's output\n\n----------------------------\n\n";
-> 14 car new_car;
15 new_car.print_name();
16
17
(lldb) continue
Process 82513 resuming
my name is october Process 82513 exited with status = 0 (0x00000000)

程序无异常, 退出返回值为0

Process 82513 exited with status = 0 (0x00000000)

指定文件设置设置断点

准备

这里准备了另一个文件 car.hpp, 源码如下

#ifndef _car_h
#define _car_h
#include <iostream>
class car
{
public:
car(const car& instance) = delete;
car(const car&& instance) = delete;
car& operator = (const car& instance) = delete;
car& operator = (const car&& instance) = delete; car(){}
~car(){} void print_name()
{
std::cout << "my name is october\n\n";
}
}; #endif //! _car_h

调用代码如下:

    car new_car;
new_car.print_name();

使用breakpoint set --file [文件名] --line [行号] 可指定文件设置断点。

(lldb) breakpoint set --file car.hpp --line 18
Breakpoint 2: where = demo`car::print_name() + 12 at car.hpp:18:19, address = 0x00000000004012ec

p/<fmt> 输出

p/t 输出二进制

p/t [变量名] 将输出二进制

(lldb) p/t var_x
(int) $2 = 0b00000000000000000000000000010011

p/o 输出十进制

p/o [变量名] 将输出十进制

(lldb) p/o var_x
(int) $1 = 023

p/o 输出十六进制

p/t [变量名] 将输出十六进制

(lldb) p/x var_x
(int) $0 = 0x00000013

其他进制? 这里

lldb调试C++总结(3)的更多相关文章

  1. iOS逆向工程之Hopper+LLDB调试第三方App

    LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具.使用LLDB可以动态的调试你的应用程序,如果你不做其他的额外处理 ...

  2. iOS LLDB调试器

    随着Xcode 5的发布,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器.它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能.LLDB为Xcode提供了底层调试环 ...

  3. 使用Python脚本强化LLDB调试器

    LLDB是Xcode自带的调试器,作为一个iOS应用开发程序员,平时我在开发应用时会使用LLDB来调试代码.在逆向应用时,也会用到LLDB来跟踪应用的执行过程. LLDB还内置了一个Python解析器 ...

  4. LLDB调试基本使用

    在平时开发中,我们可能需要调试某些东西,比如查看给服务器发请求时传过去的参数,如果不适用LLDB的话我们用的最多的就是通过NSLog方式去打印,但现在我们可以精简这个步骤,那就是使用LLDB调试命令. ...

  5. iOS 开发者旅途中的指南针 - LLDB 调试技术

    文章转载于:iOS 开发者旅途中的指南针 - LLDB 调试技术 今天给大家介绍的内容,无关乎任何功能性开发技术,但又对开发的效率影响至深,这就是调试技术. 何为调试呢,比如我们用 print 函数在 ...

  6. centos7使用lldb调试netcore应用转储dump文件

    centos7下安装lldb,dotnet netcore 进程生成转储文件,并使用lldb进行分析 随着netcore应用在linux上部署的应用越来越多,碰到cpu 100%,内存暴涨的情况也一直 ...

  7. centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

    写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用. 当然,在真实的产线环境中需要分析的数据和难度远远高于demo所示,所以demo的作用也仅仅只能起到介绍工具的作用. ...

  8. Xcode - LLDB调试技巧

    LLDB是Xcode默认的调试器,它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能.平时用Xcode运行程序,实际走的都是LLDB.熟练使用LLDB,可以让你debug事半功倍. ...

  9. Swift 使用 LLDB 调试命令

    swift 和 oc 的语法不一样: Xcode 调试技巧之 Swift 篇 打印和赋值,观察数值变量和view对象属性 p指令可打印其对象类型.内存地址以及该对象的值等具体信息, po指令则是打印其 ...

  10. iOS - 浅谈LLDB调试器

    摘要 LLDB是Xcode默认的调试器,它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能.平时用Xcode运行程序,实际走的都是LLDB.熟练使用LLDB,可以让你debug事半功 ...

随机推荐

  1. 洛谷 P5471 - [NOI2019] 弹跳(二维线段树优化建图+堆优化存边)

    题面传送门 一道非常有意思的题(大概可以这么形容?) 首先看到这类一个点想一个区域内连边的题目可以很自然地想到线段树优化建图,只不过这道题是二维的,因此需要使用二维线段树优化建图,具体来说,我们外层开 ...

  2. 认识Influxdb时序数据库及Influxdb基础命令操作

    认识Influxdb时序数据库及Influxdb基础命令操作 一.什么是Influxdb,什么又是时序数据库 Influxdb是一个用于存储时间序列,事件和指标的开源数据库,由Go语言编写而成,无需外 ...

  3. os.path.join()函数

    连接两个或更多的路径名组件 import os p1 = '/date' p2 = 'mage' p3 = 'img' all = os.path.join(p1,p2,p3) print(all) ...

  4. Java 好用的东西

    Java自带的一些好用的东西: 求一个数的每一位:(toCharArray) int i = 10;char[] s = String.valueOf(i).toCharArray(); 十进制转二进 ...

  5. Mysql-多个left join 计算逻辑

    单个left join: (1)一对一:结果表的行数=左表行数 (2)一对多:结果表的行数>左表行数 多个left join: (0)多个left join由上到下,依次生成查询表,原理同单个l ...

  6. 浅谈MySQL数据库面试必要掌握知识点

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 MySQL官方地址 https://www.mysql.com/ MySQL 8系列最新版本为8.0.27,5系列的最 ...

  7. Jenkins:参数化构建:分支|模块|回滚|打印日志

    @ 目录 多分支 安装Git Parameter Plug-In 配置参数 选择构建分支 分模块 前提 分模块build 参数配置 分模块shell脚本 mvn 的基本用法 分模块运行 Jenkins ...

  8. 数据库时间和 java 时间不一致解决方案

    java添加 date 到数据库,时间不一致 使用 date 添加到数据库,数据库显示的时候和date时间相差 8 个小时,这是由于 mysql 上的时区的问题,这里有两个解决方案: 方案一: 设置数 ...

  9. 【vector+pair】洛谷 P4715 【深基16.例1】淘汰赛

    题目:P4715 [深基16.例1]淘汰赛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题因为数据范围不大,所以做法可以非常简单,使用一个vector加上pair就可以了: ...

  10. C++构造函数和析构函数初步认识(2)

    构造函数的三个作用1.构造对象2.对象初始化3.类型转换  //Test1.h #include<iostream> using namespace std; //构造对象 //初始化对象 ...