apklug插件托管服务开发教程之按条件查询云端插件-01

以一个简单的输出程序为例:

#include<iostream>
#include<cstring>
#include<cstdio>

using namespace std;

class point
{
public:
    int a,b,c;
};

point p;

void fuc()
{
    for(int i=1;i<=10;++i)
    {
        ++p.a;
        ++p.b;
        ++p.c;

        cout<<p.a<<' '<<p.b<<' '<<p.c<<endl;
    }
}
int main()
{
    p.a=p.b=p.c=0;
    fuc();

    cout<<"end."<<endl;
    return 0;
}

运行结果如图:

调试的时候,可以直接在行号后用鼠标点一下来添加断点(如图:

之后“菜单-Debug-Start/Continue”(或直接快捷键F8)即可运行到断点处,单步是F7

以上操作跟VC差不多,接下来是用gdb命令的方法:

启动调试之后,可以在Debugger选项卡的Command框里输命令(如图:

一般调试时最常用的是设置断点,查看变量的值,首先

break funtion
break line-number

这两个命令分别是在指定的函数,或者行号处设置断点,例如,对于样例程序:

break fuc   //在fuc函数处添加断点

break 20    //在第20行添加断点

如图:

(在fuc函数处添加断点

(在第20行添加断点

添加断点之后,可以用命令‘c’来运行到断点处(作用于F8类似),或是用命令‘n’来单步走(类似F7)

在Command中输入‘c’回车,‘c’回车,来到第20行的断点处

此时若想要查看变量的值,可以用命令‘p’(printf的简写),例如想查看类p,则用命令‘p p’。如图:

(输入‘p p’回车

(即可查看p此时的情况

如果想去除某个断点的话,可以使用‘clear’命令

clear func    //清除函数func处的断点

clear nth     //清除第nth行处的断点

或是直接‘delete’清除所有断点。

最后想终止调试的话,直接‘q’回车就可以了。

附一个搜到的比较全的命令表,来自http://www.programlife.net/gdb-manual.html

GDB 命令行参数

启动 GDB:

l  gdb executable

l  gdb -e executable -c core-file

l  gdb executable -pid process-id

(使用命令 ‘ps-auxw‘ 可以查看进程的 pid)


选项


含义


–help

-h


列出命令行参数。


–exec=file

-e file


指定可执行文件。


–core=core-file

-c core-file


指明 core 文件。


–command=file

-x file


从指定文件中读取 gdb 命令。


–directory=directory

-d directory


把指定目录加入到源文件搜索路径中。


–cd=directory


以指定目录作为当前路径来运行 gdb 。


–nx

-n


不要执行 .gdbinit 文件中的命令。默认情况下,这个文件中的命令会在所有命令行参数处理完后被执行。


–batch


在非交互模式下运行 gdb 。从文件中读取命令,所以需要 -x 选项。


–symbols=file

-s file


从指定文件中读取符号表。


-write


允许对可执行文件和 core 文件进行写操作。


–quiet

-q


不要打印介绍和版权信息。


–tty=device


指定 device 为运行程序的标准输入输出。


–pid=process-id

-p process-id


指定要附属的进程 ID 。

GDB命令

GDB 中使用的命令:


命令


描述


help


列出 gdb 帮助信息。


help topic


列出相关话题中的 gdb 命令。


help command


列出命令描述信息。


apropos search-word


搜索相关的话题。


info args

i args


列出运行程序的命令行参数。


info breakpoints


列出断点。


info break


列出断点号。


info break breakpoint-number


列出指定断点的信息。


info watchpoints


列出观察点。


info registers


列出使用的寄存器。


info threads


列出当前的线程。


info set


列出可以设置的选项。


Break and Watch


break funtion

break line-number


在指定的函数,或者行号处设置断点。


break +offset

break -offset


在当前停留的地方前面或后面的几行处设置断点。


break file:func


在指定的file文件中的func处设置断点。


break file:nth


在指定的file文件中的第nth行设置断点。


break *address


在指定的地址处设置断点。一般在没有源代码时使用。


break line-number ifcondition


如果条件满足,在指定位置设置断点。


break line threadthread-number


在指定的线程中中断。使用info threads可以显示线程号。


tbreak


设置临时的断点。中断一次后断点会被删除。


watch condition


当条件满足时设置观察点。


clear

clear func

clear nth


清除函数func处的断点。

清除第nth行处的断点。


delete

d


删除所有的断点或观察点。


delete breakpoint-number

delete range


删除指定的断点,观察点。


disable breakpoint-number-or-range

enable breakpoint-number-or-range


不删除断点,仅仅把它设置为无效,或有效。

例子:

显示断点: info break

设置无效: disable 2-9


enable oncebreakpoint-number


设置指定断点有效,当到达断点时置为无效。


enable del breakpoint-number


设置指定断点有效,当到达断点时删除它。


finish


继续执行到函数结束。


Line Execution


step

s

step number-of-steps-to-perform


进入下一行代码的执行,会进入函数内部。


next

n

next number


执行下一行代码。但不会进入函数内部。


until

until line-number

until line-number ifcondition


继续运行直到到达指定行号,或者函数,地址等。


return

return expression


弹出选中的栈帧(stack frame)。如果后面指定参数,则返回表达式的值。


stepi

si

nexti

ni


执行下一条汇编/CPU指令。


info signals

info handle

handle SIGNAL-NAMEoption


当收到信号时执行下列动作:nostop(不要停止程序),stop(停止程序执行),print(显示信号),noprint(不显示),pass/noignore(允许程序处理信号),nopass/ignore(不让程序接受信号)


where


显示当前的行号和所处的函数。


Program Stack


backtrace

bt

bt inner-function-nesting-depth

bt -outer-function-nesting-depth


显示当前堆栈的追踪,当前所在的函数。


backtrace full


打印所有局部变量的值。


frame number

number


选择指定的栈帧。


up number

down number


向上或向下移动指定个数的栈帧。


info frame addr


描述选中的栈帧。


info args

info all-reg

info locals

info catch


显示选中栈帧的参数,局部变量,异常处理函数。all-reg也会列出浮点寄存器。


Source Code


list

l

list line-number

list function

list -

list start#,end#

list filename:function


列出相应的源代码。


set listsize count

show listsize


设置list命令打印源代码时的行数。


directory directory-name

dir directory-name

show directories


在源代码路径前添加指定的目录。


directory


当后面没有参数时,清除源代码目录。


Examine Variables


print variable

variable

file::variable

p ‘file‘::variable


打印指定变量的值。


p *array-var@length


打印arrary-var中的前length项。


p/x var


以十六进制打印整数变量var


p/d var


把变量var当作有符号整数打印。


p/u var


把变量var作为无符号整数打印。


p/o var


把变量var作为八进制数打印。


p/t var

x/b address

x/b &variable


以整数二进制的形式打印var变量的值。


p/c variable


当字符打印。


p/f variable


以浮点数格式打印变量var


p/a variable


打印十六进制形式的地址。


x/w address

x/4b &variable


打印指定的地址,以四字节一组的方式。


call expression


类似于print,但不打印 void 。


disassem addr


对指定地址中的指令进行反汇编。


Controlling GDB


set gdb-option value


设置 GDB 的选项。


set print array on

set print array off

show print array


以可读形式打印数组。默认是 off 。


set print array-indexes on

set print array-indexes off

show print array-indexes


打印数组元素的下标。默认是 off 。


set print pretty on

set print pretty off

show print pretty


格式化打印 C 结构体的输出。


set print union on

set print union off

show print union


打印 C 中的联合体。默认是 on 。


set print demangle on

set print demangle off

show print demangle


控制 C++ 中名字的打印。默认是 on 。


Working Files


info files

info share


列出当前的文件,共享库。


file file


file当作调试的程序。如果没指定参数,丢弃。


core file


file当作 core 文件。如果没指定参数,则丢弃。


exec file


file当作执行程序。如果没指定参数,则丢弃。


symbol file


file中读取符号表。如果没指定参数,则丢弃。


load file


动态链入file文件,并读取它的符号表。


path directory


把目录directory加入到搜索可执行文件和符号文件的路径中。


Start and Stop


run

r

run command-line-arguments

run < infile > outfile


从头开始执行程序,也允许进行重定向。


continue

c


继续执行直到下一个断点或观察点。


continue number


继续执行,但会忽略当前的断点number次。当断点在循环中时非常有用。


kill


停止程序执行。


quit

q


退出 GDB 调试器。

GDB 操作提示

l  在编译可执行文件时需要给 gcc 加上 "-g" 选项,这样它才会为生成的可执行文件加入额外的调试信息。

l  不要使用编译器的优化选项,比如: "-O","-O2"。因为编译器会为了优化而改变程序流程,那样不利于调试。

l  在 GDB 中执行 shell 命令可以使用:shell command

l  GDB 命令可以使用 TAB 键来补全。按两次 TAB 键可以看到所有可能的匹配。

l  GDB 命令缩写:例如 info bre 中的 bre 相当于 breakpoints。

GDB 在 Emacs 中的操作:


emacs 按键


动作


M-x gdb


切换到 gdb 模式。


C-h m


显示 gdb 模式介绍信息。


M-s


等同于gdb 中的 step 命令。


M-n


等同于gdb 中的 next 命令。


M-i


等同于gdb 中的 stepi 命令。


C-c C-f


等同于gdb 中的 finish 命令。


M-c


等同于gdb 中的 continue 命令。


M-u


等同于gdb 中的 up 命令。


M-d


等同于gdb 中的 down 命令。

apklug插件托管服务开发教程之按条件查询云端插件-01,布布扣,bubuko.com

时间: 2024-10-06 10:13:34

apklug插件托管服务开发教程之按条件查询云端插件-01的相关文章

Unity多玩家网络游戏开发教程1章Unity带有网络功能

Unity网络多玩家游戏开发教程第1章Unity自带网络功能 Unity拥有大量的第三方插件.专门提供了对网络功能的支持. 可是.大部分开发人员第一次接触到的还是Unity自带的网络功能.也就是大家常常说到的Unity Networking API.这些API是借助于组件NetworkView发挥作用的,而它能够简化开发人员大量的网络功能编码任务.本文选自<Unity网络多玩家游戏开发教程(大学霸内部资料)> NetworkView组件 在Unity中,NetworkView组件用于处理游戏在

apkplug插件托管服务简化与简介-05

本文基于TuoClondService1.1.0讲解 apkplug插件托管服务是提供给开发者一个远程发布插件的管理平台,但v1.0.0版本接口调用有些复杂我们在v1.1.0版本中着重对其进行了简化 与封装,使开发者能更简单明了的使用这项服务. apkplug插件托管分为两部分 云服务托管:开发者须将主应用与插件apk包上传托管服务器 查询api接口:开发者可根据该接口通过简单的调用实现插件的 查询,下载安装,更新等功能 一下着重讲解查询api接口的调用方式,关于插件上传与管理平台操作请这篇文章

Unity网络多玩家游戏开发教程第1章Unity自带网络功能

Unity网络多玩家游戏开发教程第1章Unity自带网络功能 Unity拥有大量的第三方插件,专门提供了对网络功能的支持.但是,大部分开发者第一次接触到的还是Unity自带的网络功能,也就是大家经常说到的Unity Networking API.这些API是借助于组件NetworkView发挥作用的,而它可以简化开发者大量的网络功能编码任务.本文选自<Unity网络多玩家游戏开发教程(大学霸内部资料)> NetworkView组件 在Unity中,NetworkView组件用于处理游戏在网络上

大熊君JavaScript插件化开发------(第一季)

一,开篇分析 Hi,大家!大熊君又来了,今天这系列文章主要是说说如何开发基于“JavaScript”的插件式开发,我想很多人对”插件“这个词并不陌生, 有的人可能叫“组件”或“部件”,这不重要,关键是看如何设计,如何做一个全方位的考量,这是本文的重点阐述的概念.我想大家对 “jQuery插件的方式”有一定的了解,我们结合这个话题一起讨论一下,最终给出相关的实现方案,来不断提高自己的谁能力.   二,进入插件正题 一般来说,jQuery插件的开发分为两种:一种是挂在jQuery命名空间下的全局函数

ctkPlugin插件系统实现项目插件式开发

插件式开发体会: 自开始写[大话QT]系列就开始接触渲染客户端的开发,说是开发不如更多的说是维护以及重构,在接手这块的东西之前自己还有点犹豫,因为之前我一直认为客户端嘛,没什么技术含量,总是想做比较有挑战性的,为了这周总还专门找我谈了谈,算是“安抚”民心吧.正式谈话过后,我才决定接手渲染客户端的开发. 渲染客户端的所有构成均是采用开源框架拼凑起来的整体,细分它的组成大致包含以下开源模块,简单描述: 1> CTKPlugin插件系统框架.负责整个项目的架构,决定了项目采用插件形式开发维护. 2>

第十七篇 基于Bootstarp 仿京东多条件筛选插件的开发(展示下)

前些时候用换了工作,本来是用的前端框架是easyui,后面用的是bootstrap.对于我来说虽然不是新东西,因为原来毕业时候用过一段时间,也不懂什么插件的开发,现在用过easyui后觉得easyui的用法比较好,容易上手,所有一直有个想法,去开发几个插件自己用用.不多说,上篇文章发面一个多选插件的使用方法,虽然有点不是很完善,但还是可以来用用的.这次就详细说说原理和开发的结节,以及要注意的地方.关于jQuery的插件开发根本也不是什么难的事情,下面就说的我的想法. 开发的原理 jQuery的插

Intellij插件开发教程1:用Intellij出的Gradle插件进行开发

前言:之前看到网上大部分的Intellij开发教程都是采用Intellij官方文档的那个版本,配置Intellij SDK一大堆的. 现在给大家介绍简单的方法吧,我们组内大神找到的.我们需要用到的是Intellij的gradle插件 plugins { id "org.jetbrains.intellij" version "0.2.18" } 关于这款插件的介绍:Gradle Intellij Plugin 做出的效果图: 插件运行和debug只需要运行gradl

基于MFC的ActiveX控件开发教程------------浏览器插件之ActiveX开发

一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务数据交互.需插件才能实现的与本地设备的交互等)的情况下可以酌情慎用. 浏览器插件总体可以划分为两大阵营,即IE支持的插件以及非IE支持的插件.本来在Netscape时代,对于浏览器插件是有公用的规范的(NPAPI),一开始所有浏览器都支持该规范,包括IE.后来出于商业原因,微软的IE不再支持NPAPI,改而自己开发了一套基于COM的Ac

微信公众账号开发教程

微信公众账号开发教程 一.第1篇-引言 本文转载来自柳峰老师的博客,在这里非常感谢柳峰老师的分享和贡献! 内容方面,大概会涉及到: 1)前沿知识:微信公众帐号的分类.两种模式各自的特点和区别.开发模式的配置使用等: 2)API中各类消息的使用(我已经对api进行封装并打成了jar包,到时候会考虑分享出来): 3)微信公众帐号开发中的小技巧(如换行.通过代码发送表情.屏幕飘雪花.表情的接收识别.在Android和iOS上表现不一致等等): 4)与业务系统对接的方法(链接.短信等,除了技术讲解还会做