gdb commands

gcc/g++ -g -Wall -o sort sort.c

ddd --separate file

gdb file -tui

gdb file core

Ctrl+P
Ctrl+N
Ctrl+X+A

help

run
    run
    run arguments
        # run 12 5 7

break
    break line_number
        # break 43
    break function_name
        # break main

    break filename:line_number
        # break src/ins.c:12
    break filename:function_name
        # break src/ins.c:sort

    break +offset
        # break +12
    break -offset
        # break -12

    break *address
        # break *0x1234

    break break_args if condition_expression
        # break if i == 999 <==> continue N
        # break 31 if x==1 <==> break 31 ---> condition 1 x==1
        # break sort if x > 1 <==> break sort ---> condition 1 x > 1
        # break 55 if (x & y) == 1 && p != NULL && (i + j) % k < 2
        # break 57 if strlen(str) > 3 && myfun(str) && !error(n)
        # break 88 thread 3 if x==y

clear
    clear line_number
        # clear 43
    clear function_name
        # clear main
    clear filename:line_number
        # clear src/ins.c:12
    clear filename:function_name
        # clear src/ins.c:sort
    clear filename
        # clear main

tbreak

hbreak

rbreak

continue
    continue breakpoint_count
        # continue 3

condition
    condition breakpoint_index condition_expression
        # condition 1 x==1 # set condition
        # condition 1 # empty condition, but keep breakpoint

info breakpoints

next
    next times
        # next 3

step
    step times
        # step 3

delete
    delete
    delete breakpoint_index/watch_index/breakpoint_list
        # delete 5

list
    list filename
        # list main
    list function_name
        # list insert
    list filename:function_name
        # list cstring.c:main

quit

disable
    disable breakpoint_list
        # disable 1 2 3

enable
    enable breakpoint_list
        # enable 1 2 3
    enable once breakpoint_list
        # enable once 1 2 3

finish

until
    until
    until line_number
        # until 17
    until function_name
        # until swap
    until filename:line_number
        # until main:17
    until filename:function_name
        # until main:swap

print
    print varriable
        # print n
    print /format varriable
        # print /x n
        # print /c n
        # print /s n
        # print /f n

printf
    printf format, args
        # printf "%d\n", n

display
    display varriable
        # display *p
        # disable display 1
        # enable display 1
        # undisplay 1

ptype
    ptype varriable

---------
    print cos(0.0)          # $1 = 14368
    print (double)cos(0.0)  # $1 = 14368
    -----
    set $p = (double (*) (double))cos
    ptype $p # type = double (*) ()
    print cos(3.14159265) # $2 = 14368
    print $p(3.14159265)  # $3 = -1
---------

commands
    commands breakpoint_number
    ...commands...
    end
        # commands 1
        # silent
        # printf "fib was passed %d.\n", n
        # continue
        # end

        # define print_and_go
        # printf $arg0, $arg1
        # continue
        # end
        # commands 1
        # silent
        # print_and_go "fib was passed %d." n
        # end

        # commands 2
        # silent
        # printf "string has a length of %d\n", strlen(string)
        # end

        # commands 3
        # print *tmp
        # if 0 != tmp->left
        #   print tmp->left->val
        #   else
        #   print "none"
        #   end
        # if 0 != tmp->right
        #   print tmp->right->val
        #   else
        #   print "none"
        #   end
        # end

        # commands 3 # cancel conmmands 3
        # end

show user

watch
    watch variable/expression
        # watch x       # when x changes pause
        # watch x > 5   # when (x>5) changes pause
        # watch (i | j > 12) && i > 24 && strlen(name) > 6

info locals

# to show dynamic-array
    # int * p = (int *)malloc(sizeof(int) * 8));
    *pointer@number_of_elements
        # print *p@8
    (type [number_of_elements])*pointer
        # (int [8])*p

set
    set variable = n
        # set argc = 3
    set variable_array variable_list
        # set args 1 2 3 4 # change argv[1-5]
        # (char * [5])*argv
        # *argv@5
    set $variable = n
        # set $i = 0
        # print w[$i++]

ulimit
    ulimit -c n # n KB
    ulimit -c unlimited

limit
    limit coredumpsize n # n Byte, for tcsh, csh

backtrace

frame frame_number
    # frame 1

strace file args

info threads

thread thread_index
    # thread 3

bt

--------------------------------------------
    # ps ax
    # gdb server 1254 # gdb file process_id
    # bt
    # frame 1         # frame frame_id
--------------------------------------------

handle SIGSEGV nostop noprint

-------------------------------------------------------------------
    # cd z
    # gcc -g -c b.c
    # ar rc lib88.a b.o
    # cd ..
    # gcc -g -o a.out a.c -l88 -Lz # gcc -g -o a.out a.c z/lib88.a
-------------------------------------------------------------------
    # cd z
    # gcc -fPIC -c b.c
    # gcc -shared -o lib99.so b.o
    # cd ..
    # gcc -g -o a.out a.c -l99 -Lz # gcc -g -o a.out a.c z/lib99.so
-------------------------------------------------------------------


在使用gdb调试时,可以使用commands命令来设置断点,并指定在每次到达该断点时要执行的一组命令。该命令的使用方法如下: 1. 首先,使用gdb启动程序,例如:gdb ./gdbdebug 2. 接下来,使用break命令设置一个断点,例如:b abc.cpp:10 3. 然后,使用commands命令将以下命令添加到指定的断点上: commands breakpoint-number 命令1 命令2 ... end 这里的breakpoint-number是断点号,表示将以下命令添加到指定的断点上。可以添加任何有效的GDB命令,每行一个命令,以end结束。 例如,假设我们有以下示例代码: ```cpp using namespace std; void func1() // 行号为10 { cout << "before" <<endl; } int main() { func1(); return 0; } ``` 我们可以使用以下命令来设置断点并指定commands: ```bash gdb a.out b abc.cpp:10 commands 1 silent prints "after" return c end run ``` 这样,在运行程序时,当程序执行到这个断点时,GDB会执行commands中指定的命令列表,然后继续执行程序。在这个例子中,commands命令会将输出修改为"after",然后继续执行程序,最终输出结果为"after"。 参考资料: 1. [GDB]断点(breakpoint)命令列表:commands、silent 2. 书籍《软件调试的艺术.pdf》2.11节 3. gdb commands命令用法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [GDG调试技巧之命令列表(commands)](https://blog.youkuaiyun.com/warden007/article/details/82888035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [GDB Commands用法](https://blog.youkuaiyun.com/qq_33726635/article/details/117199722)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值