zoukankan      html  css  js  c++  java
  • Emacs 中 GDB 的使用

    Emacs 提供了方便的 GDB 调试功能,使用方法简明如下,

    1. 编译时加入调试信息, 例如: $ clang++ -g -Wall t.cpp -o t

    2. 调试 t ,直接用命令 M-x gdb 打开 gdb 调试窗口,默认为单一窗口,可以使用命令 M-x gdb-many-windows 打开多窗格。

        ( gdb 会自动根据当前环境状态,将 t 作为默认调试文件, 不用像在 shell 窗口调试中那样  $ gdb t )

    3. 常用调试指令,

      l (list): 从第一行开始列出源码,默认10行。

      b (break):  b <行号> , b <函数名>

      r (run): 开始运行调试器,或重新开始运行调试器

      c (continue): 继续运行到下一个断点,或运行到程序结束

      clear : clear <行号> ,删除特定行的断点

      d (delete): d <断点编号>,删除特定编号的断点

      n (next): 单步执行下一行,如果本行有函数调用,不进入函数

      s (step): 单步执行下一行,如果本行有函数调用,进入函数

      until: 结束当前循环

      p (print): p <变量名>, 显示变量内容

      whatis: whatis<变量名>,显示变量类型

      info: info b, 显示断点信息。 info r 显示寄存器信息。 info local 显示当前函数中的局部变量信息。info prog 显示被调试程序的执行状态。

      p *array@len : 打印一维数组

      p **array@len : 打印二维数组

      quit: 退出调试器。

    4. emacs 默认的 gdb-many-windows 有6个调试窗口,有些不常用的,比如断点信息窗等,再此将其简化为 4 个,将如下代码加入到 emacs 配置文件即可

    ;;;;======================================================== < for gdb >

    ;;;; set gdb multi-windows when open
    (setq gdb-many-windows t)

    ;;;; customize the gdb multi-windows
    (defadvice gdb-setup-windows (after my-setup-gdb-windows activate)
      "my gdb UI"
      (gdb-get-buffer-create 'gdb-stack-buffer)
      (set-window-dedicated-p (selected-window) nil)
      (switch-to-buffer gud-comint-buffer)
      (delete-other-windows)
      (let ((win0 (selected-window))
            (win1 (split-window nil nil 'left))  ;; code and output
            (win2 (split-window-below (/ (* (window-height) 3) 4)))  ;; stack
            )
        (select-window win2)
        (gdb-set-window-buffer (gdb-stack-buffer-name))
        (select-window win1)
        (set-window-buffer
         win1
         (if gud-last-last-frame
             (gud-find-file (car gud-last-last-frame))
           (if gdb-main-file
               (gud-find-file gdb-main-file)
             ;; Put buffer list in window if we
             ;; can't find a source file.
             (list-buffers-noselect))))
        (setq gdb-source-window (selected-window))
        (let ((win3 (split-window nil (/ (* (window-height) 3) 4))))  ;; io
          (gdb-set-window-buffer (gdb-get-buffer-create 'gdb-inferior-io) nil win3))
        (select-window win0)
        ))

    完。

  • 相关阅读:
    bzoj2683简单题 cdq分治
    bzoj3963[WF2011]MachineWorks cdq分治+斜率优化dp
    bzoj1767[Ceoi2009]harbingers 斜率优化dp
    bzoj2753[SCOI2012]滑雪与时间胶囊 最小生成树
    bzoj1492[NOI2007]货币兑换Cash cdq分治+斜率优化dp
    刷题总结——pole(uva 1638 dp)
    刷题总结——分配笔名(51nod1526 trie树)
    刷题总结——树有几多愁(51nod1673 虚树+状压dp+贪心)
    刷题总结——book of evil(codefoeces 337D)
    刷题总结——解方程(NOIP2014)
  • 原文地址:https://www.cnblogs.com/gaowengang/p/5799292.html
Copyright © 2011-2022 走看看