精华内容
下载资源
问答
  • - 无序列举(-后面注意空格) 有序列举 5. 有序列举(1.后面注意空格) 横线 <hr> 除了上述之外,由于我常常使用的是markdown的在线编辑器,所以也经常使用功能栏中的工具,比如加粗,斜体,引用,代码...

    我的常用语法如下:

    1. 颜色大小
    <font color=red size=5>text</font>
    
    1. 目录
    ### 三级标题(#后面注意空格)
    
    1. 无序列举
    - 无序列举(-后面注意空格)
    
    1. 有序列举
    1. 有序列举(1.后面注意空格)
    
    1. 横线
    <hr>
    

    除了上述之外,由于我常常使用的是markdown的在线编辑器,所以也经常使用功能栏中的工具,比如加粗,斜体,引用,代码块等,就不用记了。

    展开全文
  • C实战:强大的程序调试工具GDB

    千次阅读 2015-06-12 21:21:02
    C实战:强大的程序调试工具GDB1.基本调试这里只列举最最常用的GDB命令。1.1 启动GDBgdb program:准备调试程序。...1.3 运行程序run args:开始运行程序,run后面可以程序需要的参数,就像在命令行正常

    C实战:强大的程序调试工具GDB

    1.基本调试

    这里只列举最最常用的GDB命令。

    1.1 启动GDB

    gdb program:准备调试程序。也可以直接进入gdb,再通过file命令加载。

    1.2 添加断点

    b function:为函数设置断点。b是break的缩写,除了函数名,还可以是地址、当前执行处的+/-偏移等。

    1.3 运行程序

    run args:开始运行程序,run后面可以加程序需要的参数,就像在命令行正常运行时那样。

    1.4 单步调试

    s/n/si/c/kill:s即step in,进入下一行代码执行;n即step next,执行下一行代码但不进入;si即step instruction,执行下一条汇编/CPU指令;c即continue,继续执行直到下一个断点处;kill终止调试;quit退出GDB。

    1.5 打印调试信息

    bt:bt是backtrace的缩写,打印当前所在函数的堆栈路径。
    info frame id:打印选中的栈帧的信息。
    info args:打印选中栈帧的参数。
    print variable:打印指定变量的值。
    list:列出相应的源代码。
    info registers:查看所有寄存器的值。

    还有个更灵活强大的是直接打印%esp开始的前N个元素,例如打印栈上前10个元素就是:x/10x $sp

    2.GDB实战

    下面是一个使用了上述命令的实战例子:

    [root@BC-VM-edce4ac67d304079868c0bb265337bd4 bufbomb]# gdb bufbomb 
    GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6)
    Copyright (C) 2010 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-redhat-linux-gnu".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>...
    Reading symbols from /root/Temp/bufbomb/bufbomb...done.
    (gdb) b getbuf
    Breakpoint 1 at 0x8048ad6
    (gdb) run -t cdai
    Starting program: /root/Temp/bufbomb/bufbomb -t cdai
    Team: cdai
    Cookie: 0x5e5ee04e
    
    Breakpoint 1, 0x08048ad6 in getbuf ()
    Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.149.el6_6.4.i686
    
    (gdb) bt
    #0  0x08048ad6 in getbuf ()
    #1  0x08048db2 in test ()
    #2  0x08049085 in launch ()
    #3  0x08049257 in main ()
    (gdb) info frame 0
    Stack frame at 0xffffb540:
     eip = 0x8048ad6 in getbuf; saved eip 0x8048db2
     called by frame at 0xffffb560
     Arglist at 0xffffb538, args: 
     Locals at 0xffffb538, Previous frame's sp is 0xffffb540
     Saved registers:
      ebp at 0xffffb538, eip at 0xffffb53c
    (gdb) info registers
    eax            0xc      12
    ecx            0xffffb548       -19128
    edx            0xc8c340 13157184
    ebx            0x0      0
    esp            0xffffb510       0xffffb510
    ebp            0xffffb538       0xffffb538
    esi            0x804b018        134524952
    edi            0xffffffff       -1
    eip            0x8048ad6        0x8048ad6 <getbuf+6>
    eflags         0x282    [ SF IF ]
    cs             0x23     35
    ss             0x2b     43
    ds             0x2b     43
    es             0x2b     43
    fs             0x0      0
    gs             0x63     99
    (gdb) x/10x $sp
    0xffffb510:     0xf7ffc6b0      0x00000001      0x00000001      0xffffb564
    0xffffb520:     0x08048448      0x0804a12c      0xffffb548      0x00c8aff4
    0xffffb530:     0x0804b018      0xffffffff
    
    (gdb) si
    0x08048ad9 in getbuf ()
    (gdb) si
    0x08048adc in getbuf ()
    (gdb) si
    0x080489c0 in Gets ()
    (gdb) n
    Single stepping until exit from function Gets,
    which has no line number information.
    Type string:123
    0x08048ae1 in getbuf ()
    (gdb) si
    0x08048ae2 in getbuf ()
    (gdb) c
    Continuing.
    Dud: getbuf returned 0x1
    Better luck next time
    
    Program exited normally.
    (gdb) quit

    3.逆向调试

    GDB 7.0后加入了Reversal Debugging功能。具体来说,比如我在getbuf()和main()上设置了断点,当启动程序时会停在main()函数的断点上。此时敲入record后continue到下一断点getbuf(),GDB就会记录从main()到getbuf()的运行时信息。现在用rn就可以逆向地从getbuf()调试到main()。就像《X战警:逆转未来》里一样,挺神奇吧!

    这种方式适合从bug处反向去找引起bug的代码,实用性因情况而异。当然,它也是有局限性的。像程序假如有I/O输出等外部条件改变时,GDB是没法“逆转”的。

    [root@vm bufbomb]# gdb bufbomb 
    GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6)
    Copyright (C) 2010 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-redhat-linux-gnu".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>...
    Reading symbols from /root/Temp/bufbomb/bufbomb...done.
    
    (gdb) b getbuf
    Breakpoint 1 at 0x8048ad6
    (gdb) b main
    Breakpoint 2 at 0x80490c6
    
    (gdb) run -t cdai
    The program being debugged has been started already.
    Start it from the beginning? (y or n) y
    
    Starting program: /root/Temp/bufbomb/bufbomb -t cdai
    
    Breakpoint 2, 0x080490c6 in main ()
    (gdb) record
    (gdb) c
    Continuing.
    Team: cdai
    Cookie: 0x5e5ee04e
    
    Breakpoint 1, 0x08048ad6 in getbuf ()
    
    (gdb) rn
    Single stepping until exit from function getbuf,
    which has no line number information.
    0x08048dad in test ()
    (gdb) rn
    Single stepping until exit from function test,
    which has no line number information.
    0x08049080 in launch ()
    (gdb) rn
    Single stepping until exit from function launch,
    which has no line number information.
    0x08049252 in main ()
    展开全文
  • 浅谈自定义类型-枚举

    2021-01-19 10:34:08
      枚举简单的说就是对已知答案的列举,通常来说比如月份、星期、性别。 enum Weekday { Mon, Tues, Wed, Thur, Fri, Sat, Sun };   枚举中的这些类型,我们又可以叫做枚举常量,枚举的默认是有值的,...

    枚举

      枚举简单的说就是对已知答案的列举,通常来说比如月份、星期、性别等。

    enum Weekday
    {
    	Mon,
    	Tues,
    	Wed,
    	Thur,
    	Fri,
    	Sat,
    	Sun
    };
    

      枚举中的这些类型,我们又可以叫做枚举常量,枚举的默认是有值的,默认从0开始,后面一次加1,或者定义一个为10,后面的在10的基础上加1。

    枚举的优点
    正常来说我们可以通过#define定义常量,但枚举具有以下优点:

    1. 增加代码的可读性和可维护性
    2. 和#define定义的标识符比较枚举有类型检查,更加严谨
    3. 防止了命名污染(封装)
    4. 便于调试
        在调试窗口下,#define是进行了替换,而使用枚举还会显示不同值所代表的含义,用起来更方便快捷。
    5. 使用方便,一次可以定义多个常量
    展开全文
  • 1.基本调试 这里只列举最最常用的GDB命令。 (1) 启动GDB gdb program:准备调试程序。也可以直接进入gdb,再通过file命令加载。...run args:开始运行程序,run后面可以程序需要的参数,就像在命令行正常运

    1.基本调试

    这里只列举最最常用的GDB命令。

    (1) 启动GDB

    gdb program:准备调试程序。也可以直接进入gdb,再通过file命令加载。

    (2) 添加断点

    b function:为函数设置断点。b是break的缩写,除了函数名,还可以是地址、当前执行处的+/-偏移等。

    (3) 运行程序

    run args:开始运行程序,run后面可以加程序需要的参数,就像在命令行正常运行时那样。

    (4) 单步调试

    s/n/si/c/kill:s即step in,进入下一行代码执行;n即step next,执行下一行代码但不进入;si即step instruction,执行下一条汇编/CPU指令;c即continue,继续执行直到下一个断点处;kill终止调试;quit退出GDB。

    (5) 打印调试信息

    bt:bt是backtrace的缩写,打印当前所在函数的堆栈路径。
    info frame id:打印选中的栈帧的信息。
    info args:打印选中栈帧的参数。
    print variable:打印指定变量的值。
    list:列出相应的源代码。
    info registers:查看所有寄存器的值。

    还有个更灵活强大的是直接打印%esp开始的前N个元素,例如打印栈上前10个元素就是:x/10x $sp


    2.应用实例

    例:

    利用冒泡排序算法程序bubble.c,演示gdb调试过程,待调试程序bubble.c的源代码如下:


    1.编译运行源程序.

    为了方便调试,在编译的时候要加上-g选项,生成的可执行文件才能用gdb进行源码的调试.


    2.启动gdb,查看bubble程序相关信息

    (1)用list(l)指令列出源程序.

    一次只能列出10行,如果要从第11行开始继续列出源代码可以直接按回车.

    (2)用info source 命令查看以下当前源程序的信息.

    可以得知程序名,目录,文件大小,语言等信息.


    3.调试bubble程序.

    (1)在函数swap处设置一个断点.

    br是break的简写.断电设置成功则显示该断点的信息,该断点号为1,地址为0x400589,它在文件bubble.c的7行.

    可以用info br命令查看以下文件bubble.c断点的信息和状态.

    其中Num列表示断点的断点号;Type列表示断点的烈性,其中breakpoint表示断点,该指令同时也会显示watch的信息,watch表示检查点;Disp表示断点的状态,del表示断点暂停后自动删除断点,keep表示断点暂停后继续保持断点,dis表示断点暂停后关闭断点;Enb表示断点是否启动,该断点是y,表示处于enable状态;Address表示断点的内存地址;What表示断点在源程序中的位置.

    (2)执行bubble程序.

    程序已经在断点1停下来,当断点停下时,可以查看变量值.

    (3)用p命令查看断点附近各变量值,并用n进行下一步的单步执行程序.

    (4)删除断点1,并用info br查看到,当前断点为无.

    (5)在18行号上设一个断点.发现断点号为2,地址为 0x4005e2,它在文件bubble.c的18行.并删除断点2,在18行设置一个断点,当j=5时让程序停下来.


    用info br命令查看断点信息.


    (6)

    继续执行程序

    程序在断点3停下,断点3是哥条件断点.要验证,只需要j=5即可.


    展开全文
  • google hack 语法

    2020-02-24 20:21:32
    关于谷歌语法其实很多搜索包括不限于百度,soso搜索引擎都可以,但是谷歌一家独大无可撼动,在国内因为我的最近严打,我的**也失效了,所以采用百度的方式。 网上也有很多关于谷歌语法的介绍,我只列举一些常用...
  • Echarts.js折线图生成

    2020-12-29 12:02:52
    注意:只在script中写左边代码是不能显示的,只需要两行代码就行了,后面会讲。 那么如何下载echarts.js 1 打开Echart官网下载点击下载->点击在线定制 2 之后进行选择打包的图表(这里我是全选了)3 点击下载...
  • 所以呢,建议新人不要一开始看这边书,不然你会怀疑人生还没入门就放弃了,就把它当做编程圣经,后面有经验了拿起来再翻翻吧。 面试系列 Java基础入门80问,适合新手,老鸟直接跳过 Java进阶 学什么? Java...
  • 注意,注意,注意 对应的前端还在更新中,后面会陆续 开源 app,小程序,flutter移动端源码。 文档 文档是对项目开发过程中遇到的一些问题的详细记录,主要是为了帮助没有基础的小伙伴快速理解这个项目。 该项目...
  • 搜索算法:回溯、递归、深度优先遍历,广度优先遍历,二叉搜索树 图论:最短路径、最小生成树 动态规划:背包问题、最长子序列 数据结构,主要有如下几种: 数组与链表:单 / 双向链表 栈与队列 哈希表 堆:最大...
  • 【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的总求和,以及显示选区包含的数字、字符、汉字的个数信息。 【GB2转BIG5】 将选中区域存储格的简体...
  • 【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的总求和,以及显示选区包含的数字、字符、汉字的个数信息。 【GB2转BIG5】 将选中区域存储格的简体字...
  • 【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的总求和,以及显示选区包含的数字、字符、汉字的个数信息。 【GB2转BIG5】 将选中区域存储格的简体...
  • 作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理多个方面。读者可以学习到以下几个方面的技巧:...
  • 作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理多个方面。读者可以学习到以下几个方面的技巧:...
  • 【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的总求和,以及显示选区包含的数字、字符、汉字的个数信息。 【GB2转BIG5】 将选中区域存储格的简体...
  • EXCEL集成工具箱V6.0

    2010-09-11 01:44:37
    【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的总求和,以及显示选区包含的数字、字符、汉字的个数信息。 【GB2转BIG5】 将选中区域存储格的简体...
  • 算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。 (5)指令系统 所谓指令系统指的是一个计算机系统能执行的所有指令的集合。 (2)数据结构研究的3个方面 ① 数据集合中各数据元素之间所固有...
  • 2.2.4 int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。 2.2.5 写一个程序, 要求...
  • 第一种解决办法:找到工程目录下local.properties文件,在ndk-bundle后面添加.cmd即可运行 ndk.dir=D\:\\Program File\\AndroidSdk\\ndk-bundle.cmd sdk.dir=D\:\\Program File\\AndroidSdk 第二种解决办法:去官网...
  • round方法返回与参数最接近的长整数,参数1/2后求其floor. 30、String s = new String("xyz");创建了几个String Object? 两个 31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的? ...
  • 即在 adb shell pm list packages 的基础上可以一些参数进行过滤查看不同的列表,支持的过滤参数如下: 参数 显示列表 无 所有应用 -f 显示应用关联的 apk 文件 -d 只显示 disabled 的应用 -e 只显示...
  • java 面试题 总结

    2009-09-16 08:45:34
    round方法返回与参数最接近的长整数,参数1/2后求其floor. 27、String s = new String("xyz");创建了几个String Object? 两个 28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序...
  • CISCO 技术大集合

    2013-05-22 01:07:13
    请注意在enable secret后面显示的是乱码,而enable password后面显示的是设置的内容。 显示结束后,系统会问是否使用这个设置: Use this configuration? [yes/no]: yes 如果回答yes,系统就会把设置的结果存入...
  • 不仅微观理论与宏观理论彼此关联,而且列举的每门应用课程皆有其微观方面与宏观方面。此外,这程本身也多多少少有所重叠:如计量经济学所提供的一套通用性分析方法,可应用于其他门课程。同样,在能够制订出重要规范...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

列举后面加等