JUST DO IT ~

          我只想當個程序員

          2016年12月15日

               摘要: 檢查宏定義
          WIN32
          _DEBUG
          _WINDOWS
          _USRDLL  閱讀全文
          posted @ 2017-08-16 10:43 小高 閱讀(407) | 評論 (0)編輯 收藏

          GDB筆記

          概覽

          基礎

          用戶態(tài)會話

          調試模式

          • 轉儲文件調試

            瞬間靜態(tài)分析,進程死狀態(tài)。
            gdb –core=file

          • 交互調試

            1. 調試新進程
              gdb exe
              gdb –args exe [args]

            2. 調試已經(jīng)運行的進程
              gdb –pid= 進程號

            3. 內核調試

          3種調試已有進程

          gdb exe

          .

          gdb –args exe [args]

          .

          gdb
          file exe
          run [args]

          .

          gdb –args gcc a.c -o a

          命令行參數(shù)

          show args

          set args 多次運行設置命令行參數(shù)

          環(huán)境變量和執(zhí)行路徑

          path directory

          .

          show paths

          .

          show environment [varname]

          .

          set environment varname[=value] 清除或者設置環(huán)境變量

          工作目錄

          繼承進入gdb工作目錄

          改變工作目錄

          cd dirctory

          顯示路徑

          pwd

          輸入輸出

          info terminal
          run > a.txt
          tty /dev/ttyb

          遠程調試可用這些輔助。

          inferior 下層 多個進程調試

          inferior gdb維護的一系列對象,每個inf對應一個調試目標進程。

          info inferior 顯示下層信息
          NULL 程序沒有跑或者已經(jīng)終止
          clone-inferior -copies 2 復制當前下層2份

          (gdb) info inferiors
          Num Description Executable
          * 1 process 10087 /home/gao/code/a
          (gdb) clone-inferior -copies 2
          Added inferior 2.
          Added inferior 3.
          (gdb) info inferiors
          Num Description Executable
          3 程序沒有跑或者已經(jīng)終止 /home/gao/code/a
          2 /home/gao/code/a
          * 1 process 10087 /home/gao/code/a
          (gdb)

          切換下程

          inferior 2 切換2這個下程。
          進程號是0,沒開始運行。
          run 運行起來。

          .

          增加一個運行下層

          add-inferior -exec executeable 增加一個運行下層
          比如說調試一個服務端程序,一個客戶端程序。

          remove-inferior n 刪掉一個下層
          detach inferior 繼續(xù)運行 quit
          kill inferior 調試進程退了,但是inferior紀錄還在。

          Tab 幫助

          (gdb) remove-
          remove-inferiors remove-symbol-file
          (gdb) remove-
          remove-inferiors remove-symbol-file
          (gdb) remove-

          file 命令

          file a.exe 可自行文件和符號文件是一個文件

          可自行文件和符號文件分開

          exec-file 指定目標文件

          .

          symbol-file 指定符號文件

          run 開始運行
          可以支持 run > >> < 重定向

          set args 清理命令行參數(shù)

          附加到進程

          gdb –pid= pid

          attach pid

          終止調試進程

          detach pid 分離進程繼續(xù)運行

          .

          quit 進程退出

          .

          q
          ctrl + D

          執(zhí)行控制

          斷點

          軟件斷點

          break 普通
          tbreak 一次性
          rbreak 正則表達式一批斷點

          • 基于cpu斷點指令,x86 int3機器碼0xcc。
          • 替換斷點位置的指令
          • CPU自執(zhí)行這里觸發(fā)斷點異常。
          • 沒有斷點數(shù)量限制。

          硬件斷點

          • 基于cpu調試寄存器,dr0~dr7,數(shù)量限制。x86可以設定4個斷點。數(shù)量限制。
          • 不修改代碼,在只讀內存上設置斷點。EEPROM上的代碼設置。
          • 有數(shù)量限制。

          location

          • linespec

          1. 行號
          2. -/+ 偏移
          3. 文件名 :行號
          4. 函數(shù)名
          5. 函數(shù):標號
          6. 文件名:函數(shù)
          7. 標號

          • explicit

          1. -source linename
          2. -function function
          3. -label label
          4. -line number

          • address location break * address

          實踐

          file banner
          b main 中斷在main函數(shù)
          info funciton useage 顯示useage函數(shù)地址
          info *0x88888e4 直接寫地址設定斷點
          info b 顯示所有斷點
          list usage 顯示useage函數(shù)
          b line.c:11
          b +2 當前顯示到14行+2行所以設定在17行

          虛擬機設定硬件斷點會失敗.
          (gdb)hbreak hd_ioctl
          (gdb) info b
          物理機可以設定.

          (gdb) hbreak v
          Hardware assisted breakpoint 2 at 0x40053a: v. (2 locations)
          (gdb) info b
          Num Type Disp Enb Address What
          1 breakpoint keep y
          breakpoint already hit 1 time
          1.1 y 0x000000000040054f in main at a.c:10 inf 1
          1.2 y 0x000000000040054f in main at a.c:10 inf 2
          2 hw breakpoint keep y
          2.1 y 0x000000000040053a in v at a.c:4 inf 1
          2.2 y 0x000000000040053a in v at a.c:4 inf 2
          (gdb)

          管理斷點

          info b 顯示斷點
          delete 1 刪除
          disable 1
          enable 1
          delete 刪除所有的斷點
          clear sum 刪除sum函數(shù)入口的所有斷點

          擴展斷點

          watchpoint 監(jiān)視一個表達式,值變化中斷。

          watch a*b+c/d
          watch *( int * )

          watch fd 監(jiān)控局部變量fd
          c 繼續(xù)運行
          info b //
          注意,x86硬件調試,寫操作,執(zhí)行過這一行,gdb顯示下一行,要看上一行。hw watchpoint,在x86平臺wachtpoint基于硬件實現(xiàn),其他平臺可能是基于軟件實現(xiàn)。 vc6純軟件執(zhí)行,執(zhí)行目標速度低。
          執(zhí)行位置超過當前區(qū)域,無效監(jiān)視點會被刪除。

          訪問監(jiān)視點
          rwatch 讀停下來。
          awatch 讀或寫停下來。 awatch fd
          watch -l

          b hd_ioctl thread 1

          info threads 帶* 當前線程

          繁忙函數(shù)解決方案

          b hd_ioctl thread 1 if fd > 0

          當斷點,斷了后執(zhí)行命令
          ()command 12
          ()silent
          ()print “fd is %d\n”,fd
          ()continue
          ()end

          動態(tài)ping不修改代碼。

          tracepoint 遠程主機通訊調試,前端stub立刻恢復執(zhí)行,但會記錄下來。

          catchpoint

          執(zhí)行控制

          進入子函數(shù)內部。單步 step

          匯編 stepi

          stepi 4
          類似nexti

          不要進入子函數(shù)

          next

          繼續(xù)執(zhí)行

          continue

          跑起來直到3號斷點命中

          until 3
          跑起來直到3號斷點命中,快捷禁止其他斷點。

          恢復執(zhí)行直到函數(shù)返回。

          finish

          調用函數(shù)!

          gdb 杜撰代碼調用函數(shù)。
          call sum(1,2) …

          強制返回

          強制main函數(shù) return。
          return 1

          觸發(fā)中斷

          異常或斷點進入調試器。
          調試器發(fā)起中斷,讓程序中斷下來。ctrl+C,app收到中斷信號,進入調試器。

          符號

          調試器讀區(qū) 調試符號。

          二進制-調試符號-源碼

          linux dwarf 存儲調試符號信息。gcc

          readelf -h filename
          里面如果有l(wèi)ine location debug標示

          readelf -w 導出調試文件

          gcc -g 才能輸出符號

          ubuntu 符號服務器
          < ddebs.ubuntu.com/pool/main/>
          分離操作
          strip

          安裝ubunte的linux 內核符號
          https://askubuntu.com/questions/197016/how-to-install-a-package-that-contains-ubuntu-kernel-debug-symbols

          安裝libc符號

          dpkg -s /lib/x86_64-linux-gun/libc-2.15.so
          dpkg -s libc.so.6
          sudo apt-get -c aptproxy.conf install libc6-dbg

          libc 調試符號

          sudo apt-get install libc6-dbg

          符號路徑

          gdb 使用file 或 symbol-file 加載符號文件
          自動搜索 path 路徑

          (gdb)i share
          * 共享庫沒調試信息

          搜索符號
          info vaiables regex 類名/函數(shù)名/變量名

          內存地址與符號互換

          info addriess 函數(shù)名

          info symbol 地址

          (gdb) info address main
          Symbol “main” is a function at address 0x400547.
          (gdb) info symbol 0x400547
          main in section .text of /home/gao/code/a

          .

          info os

          查看加載的文件內存位置

          info files

          列出全局變量

          info variable
          info va

          顯示源碼

          list
          list -
          dir 源碼路徑
          show dir

          常用命令源碼

          安裝系統(tǒng)工具源碼和調試

          apt-get source coreutils
          sudo apt-get install coreutils-dbgsym
          gdb /bin/ls
          list main
          dir ~/src/coreutils-7.4/src
          list main

          libc

          sudo apt-get source libc6-dev
          /home/ge/eglibc-2.15

          dir 搜索路徑 :分割
          $cdir 編譯路徑
          cwd 當前工作路徑

          查看調試目標

          觀察寄存器
          info reg


          子函數(shù)返回地址
          函數(shù)參數(shù)
          局部變量

          bt n 觀察函數(shù)返回地址
          frame n 切換棧幀
          up n
          down n
          info frame [address]
          info args
          info locals

          注意,切換棧幀之后可能會發(fā)生,本地變量值不準確,因為值存在寄存器中需要小心。

          觀察內存
          print

          p /f 表達式 表達式要打印位置
          xduotcf

          x

          x /Nuf
          N 打印幾個單元
          u 每個單元大小 b-1byte w-2byte h-4byte g-8byte

          f s字符串i指令格式

          x/s 0xfffff81946000 打印字符串

          x /32bx arg bit 16禁制

          (gdb) x /32bx &i
          0x7fffffffc76c: 0x01 0x00 0x00 0x00 0x70 0x05 0x40 0x00
          0x7fffffffc774: 0x00 0x00 0x00 0x00 0x40 0xfa 0xa2 0xf7
          0x7fffffffc77c: 0xff 0x7f 0x00 0x00 0x58 0xc8 0xff 0xff
          0x7fffffffc784: 0xff 0x7f 0x00 0x00 0x58 0xc8 0xff 0xff
          (gdb)

          p arg[0]
          p arg[i]

          p *&a[0]@10 a0數(shù)組開始的10個元素

          反匯編

          disas main main反匯編代碼
          x/5i schedule 這個地址開始的5條匯編指令。

          gdb mov 從左往右賦值at&t匯編。

          高級技巧

          信號

          • info signals 異常/同步/中斷

          stop 要不要中斷下來看
          printf 打印信息
          pass 要不要傳遞給應用程序。

          • handle 修改規(guī)則 handle signal act print noprint stop nostop pass nopass

          handle SIGPIPE 不要中斷下來,打印一個信息,網(wǎng)絡程序常用

          (gdb) handle SIGPIPE nostop
          Signal Stop Print Pass to program Description
          SIGPIPE No Yes Yes Broken pipe

          Thread

          info threads

          LWP-light weight process 線程編號。
          * gdb當前線程

          切換當前線程

          thread 2

          打印所有線程

          thread apply all bt 針對一群線程的命令避免切換來看。

          線程改名字

          thread name [name]

          我自己經(jīng)驗 LWP 可以很好的觀察線程負載情況。

          posted @ 2017-05-24 14:18 小高 閱讀(319) | 評論 (0)編輯 收藏
               摘要: 繪圖控件重繪->其他操作->繪圖控件重繪

          進入了這樣一個死循環(huán),函數(shù)堆棧空間分配不足夠.  閱讀全文
          posted @ 2017-04-18 10:32 小高 閱讀(174) | 評論 (0)編輯 收藏
          eclipse 配置遇到 object 找不到問題 ?
          The type java.lang.object cannot be resolved - Eclipse buildpath not working

          因為替換了 jvm版本.
          解決辦法: 
          build->library -> add library->add jre library.


          tomcat部署問題.?
          1.清理 部署 重啟.  
          2.先刪掉部署項目,可以重新配置config.

          tomcat 找不到oracle 驅動程序?
          Tomcat error: java.sql.SQLException: No suitable driver found for jdbc
          catalina_home/lib 中已經(jīng)放入了jar文件后還是報錯.
          請在 context.xml 中配置
           <WatchedResource>WEB-INF/web.xml</WatchedResource>
           <ResourceLink global="jdbc/oracle" name="jdbc/oracle" type="javax.sql.DataSource"/>
           
          在 server.xml

                 <Resource
                  name="jdbc/oracle"
                  auth="Container"
                  type="javax.sql.DataSource"
                  maxActive="100" maxIdle="30" maxWait="10000"
                  driverClassName="oracle.jdbc.OracleDriver"
                  url="jdbc:oracle:thin:@10.243.140.111:1521:test"
                  username="core"
                  password="core"/>

          eclipse 項目屬性, web deployment assembly設置   source: /webcontent   deploypath: / 


              
          tomcat 開啟gzip壓縮
          http://blog.csdn.net/hbcui1984/article/details/5666327



          Setting property 'source' to 'org.eclipse.jst.jee.server 這個不是問題.

          解決Setting property 'source' to 'org.eclipse.jst.jee.server的問題.
          http://blog.csdn.net/foreversilent/article/details/11147847

          posted @ 2017-03-09 10:02 小高 閱讀(196) | 評論 (1)編輯 收藏
               摘要:   閱讀全文
          posted @ 2016-12-15 09:34 小高 閱讀(506) | 評論 (0)編輯 收藏

          導航

          <2016年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類(352)

          收藏夾(19)

          關注的blog

          手冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 江油市| 剑河县| 榆社县| 迁西县| 承德县| 峨眉山市| 诏安县| 高尔夫| 磐安县| 叙永县| 宁南县| 正宁县| 屏边| 泰兴市| 唐河县| 淅川县| 红安县| 明溪县| 内黄县| 福建省| 磐安县| 台东县| 德江县| 永兴县| 昌图县| 乌兰察布市| 涡阳县| 庄河市| 荥经县| 陈巴尔虎旗| 石台县| 通江县| 崇文区| 临颍县| 玛多县| 阿拉尔市| 缙云县| 永新县| 阳山县| 凌云县| 玉龙|