<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JUST DO IT ~

    我只想當(dāng)個(gè)程序員

    2015年11月24日

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

    GDB筆記

    概覽

    基礎(chǔ)

    用戶態(tài)會(huì)話

    調(diào)試模式

    • 轉(zhuǎn)儲(chǔ)文件調(diào)試

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

    • 交互調(diào)試

      1. 調(diào)試新進(jìn)程
        gdb exe
        gdb –args exe [args]

      2. 調(diào)試已經(jīng)運(yùn)行的進(jìn)程
        gdb –pid= 進(jìn)程號(hào)

      3. 內(nèi)核調(diào)試

    3種調(diào)試已有進(jìn)程

    gdb exe

    .

    gdb –args exe [args]

    .

    gdb
    file exe
    run [args]

    .

    gdb –args gcc a.c -o a

    命令行參數(shù)

    show args

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

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

    path directory

    .

    show paths

    .

    show environment [varname]

    .

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

    工作目錄

    繼承進(jìn)入gdb工作目錄

    改變工作目錄

    cd dirctory

    顯示路徑

    pwd

    輸入輸出

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

    遠(yuǎn)程調(diào)試可用這些輔助。

    inferior 下層 多個(gè)進(jìn)程調(diào)試

    inferior gdb維護(hù)的一系列對(duì)象,每個(gè)inf對(duì)應(yīng)一個(gè)調(diào)試目標(biāo)進(jìn)程。

    info inferior 顯示下層信息
    NULL 程序沒(méi)有跑或者已經(jīng)終止
    clone-inferior -copies 2 復(fù)制當(dāng)前下層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 程序沒(méi)有跑或者已經(jīng)終止 /home/gao/code/a
    2 /home/gao/code/a
    * 1 process 10087 /home/gao/code/a
    (gdb)

    切換下程

    inferior 2 切換2這個(gè)下程。
    進(jìn)程號(hào)是0,沒(méi)開(kāi)始運(yùn)行。
    run 運(yùn)行起來(lái)。

    .

    增加一個(gè)運(yùn)行下層

    add-inferior -exec executeable 增加一個(gè)運(yùn)行下層
    比如說(shuō)調(diào)試一個(gè)服務(wù)端程序,一個(gè)客戶端程序。

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

    Tab 幫助

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

    file 命令

    file a.exe 可自行文件和符號(hào)文件是一個(gè)文件

    可自行文件和符號(hào)文件分開(kāi)

    exec-file 指定目標(biāo)文件

    .

    symbol-file 指定符號(hào)文件

    run 開(kāi)始運(yùn)行
    可以支持 run > >> < 重定向

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

    附加到進(jìn)程

    gdb –pid= pid

    attach pid

    終止調(diào)試進(jìn)程

    detach pid 分離進(jìn)程繼續(xù)運(yùn)行

    .

    quit 進(jìn)程退出

    .

    q
    ctrl + D

    執(zhí)行控制

    斷點(diǎn)

    軟件斷點(diǎn)

    break 普通
    tbreak 一次性
    rbreak 正則表達(dá)式一批斷點(diǎn)

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

    硬件斷點(diǎn)

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

    location

    • linespec

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

    • explicit

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

    • address location break * address

    實(shí)踐

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

    虛擬機(jī)設(shè)定硬件斷點(diǎn)會(huì)失敗.
    (gdb)hbreak hd_ioctl
    (gdb) info b
    物理機(jī)可以設(shè)定.

    (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)

    管理斷點(diǎn)

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

    擴(kuò)展斷點(diǎn)

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

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

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

    訪問(wèn)監(jiān)視點(diǎn)
    rwatch 讀停下來(lái)。
    awatch 讀或?qū)懲O聛?lái)。 awatch fd
    watch -l

    b hd_ioctl thread 1

    info threads 帶* 當(dāng)前線程

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

    b hd_ioctl thread 1 if fd > 0

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

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

    tracepoint 遠(yuǎn)程主機(jī)通訊調(diào)試,前端stub立刻恢復(fù)執(zhí)行,但會(huì)記錄下來(lái)。

    catchpoint

    執(zhí)行控制

    進(jìn)入子函數(shù)內(nèi)部。單步 step

    匯編 stepi

    stepi 4
    類(lèi)似nexti

    不要進(jìn)入子函數(shù)

    next

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

    continue

    跑起來(lái)直到3號(hào)斷點(diǎn)命中

    until 3
    跑起來(lái)直到3號(hào)斷點(diǎn)命中,快捷禁止其他斷點(diǎn)。

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

    finish

    調(diào)用函數(shù)!

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

    強(qiáng)制返回

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

    觸發(fā)中斷

    異常或斷點(diǎn)進(jìn)入調(diào)試器。
    調(diào)試器發(fā)起中斷,讓程序中斷下來(lái)。ctrl+C,app收到中斷信號(hào),進(jìn)入調(diào)試器。

    符號(hào)

    調(diào)試器讀區(qū) 調(diào)試符號(hào)。

    二進(jìn)制-調(diào)試符號(hào)-源碼

    linux dwarf 存儲(chǔ)調(diào)試符號(hào)信息。gcc

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

    readelf -w 導(dǎo)出調(diào)試文件

    gcc -g 才能輸出符號(hào)

    ubuntu 符號(hào)服務(wù)器
    < ddebs.ubuntu.com/pool/main/>
    分離操作
    strip

    安裝ubunte的linux 內(nèi)核符號(hào)
    https://askubuntu.com/questions/197016/how-to-install-a-package-that-contains-ubuntu-kernel-debug-symbols

    安裝libc符號(hào)

    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 調(diào)試符號(hào)

    sudo apt-get install libc6-dbg

    符號(hào)路徑

    gdb 使用file 或 symbol-file 加載符號(hào)文件
    自動(dòng)搜索 path 路徑

    (gdb)i share
    * 共享庫(kù)沒(méi)調(diào)試信息

    搜索符號(hào)
    info vaiables regex 類(lèi)名/函數(shù)名/變量名

    內(nèi)存地址與符號(hào)互換

    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

    查看加載的文件內(nèi)存位置

    info files

    列出全局變量

    info variable
    info va

    顯示源碼

    list
    list -
    dir 源碼路徑
    show dir

    常用命令源碼

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

    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 當(dāng)前工作路徑

    查看調(diào)試目標(biāo)

    觀察寄存器
    info reg


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

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

    注意,切換棧幀之后可能會(huì)發(fā)生,本地變量值不準(zhǔn)確,因?yàn)橹荡嬖诩拇嫫髦行枰⌒摹?/p>

    觀察內(nèi)存
    print

    p /f 表達(dá)式 表達(dá)式要打印位置
    xduotcf

    x

    x /Nuf
    N 打印幾個(gè)單元
    u 每個(gè)單元大小 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ù)組開(kāi)始的10個(gè)元素

    反匯編

    disas main main反匯編代碼
    x/5i schedule 這個(gè)地址開(kāi)始的5條匯編指令。

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

    高級(jí)技巧

    信號(hào)

    • info signals 異常/同步/中斷

    stop 要不要中斷下來(lái)看
    printf 打印信息
    pass 要不要傳遞給應(yīng)用程序。

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

    handle SIGPIPE 不要中斷下來(lái),打印一個(gè)信息,網(wǎng)絡(luò)程序常用

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

    Thread

    info threads

    LWP-light weight process 線程編號(hào)。
    * gdb當(dāng)前線程

    切換當(dāng)前線程

    thread 2

    打印所有線程

    thread apply all bt 針對(duì)一群線程的命令避免切換來(lái)看。

    線程改名字

    thread name [name]

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

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

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

    因?yàn)樘鎿Q了 jvm版本.
    解決辦法: 
    build->library -> add library->add jre library.


    tomcat部署問(wèn)題.?
    1.清理 部署 重啟.  
    2.先刪掉部署項(xiàng)目,可以重新配置config.

    tomcat 找不到oracle 驅(qū)動(dòng)程序?
    Tomcat error: java.sql.SQLException: No suitable driver found for jdbc
    catalina_home/lib 中已經(jīng)放入了jar文件后還是報(bào)錯(cuò).
    請(qǐng)?jiān)?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 項(xiàng)目屬性, web deployment assembly設(shè)置   source: /webcontent   deploypath: / 


        
    tomcat 開(kāi)啟gzip壓縮
    http://blog.csdn.net/hbcui1984/article/details/5666327



    Setting property 'source' to 'org.eclipse.jst.jee.server 這個(gè)不是問(wèn)題.

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

    posted @ 2017-03-09 10:02 小高 閱讀(194) | 評(píng)論 (1)編輯 收藏
         摘要:   閱讀全文
    posted @ 2016-12-15 09:34 小高 閱讀(500) | 評(píng)論 (0)編輯 收藏
         摘要: qt ubuntu 安裝和中文  閱讀全文
    posted @ 2016-12-01 16:30 小高 閱讀(341) | 評(píng)論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2016-05-13 15:59 小高 閱讀(234) | 評(píng)論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-12-27 17:07 小高 閱讀(491) | 評(píng)論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-12-15 15:57 小高 閱讀(270) | 評(píng)論 (0)編輯 收藏
         摘要: 解決socket 太多問(wèn)題.  閱讀全文
    posted @ 2015-12-10 10:39 小高 閱讀(321) | 評(píng)論 (0)編輯 收藏

    C面向?qū)ο缶幊虆R集

    參考資料:
    Object-oriented Programming with ANSI-C
    1993年,第一份c如何編寫(xiě)OO的資料,free.
    OOC.PDF
    https://www.cs.rit.edu/~ats/books/ooc.pdf

    中文翻譯:
    https://code.google.com/p/ooc/downloads/detail?name=ooc-translate-preview-r26.pdf&can=2&q=

    輕量級(jí)的C語(yǔ)言面向?qū)ο缶幊炭蚣?br/> http://sinojelly.blog.51cto.com/479153/281184

    UML—OOPC嵌入式C語(yǔ)言開(kāi)發(fā)精講
    里面有一套框架可以 c寫(xiě)OO.
    http://pan.baidu.com/share/link?shareid=3402978666&uk=3188261067&adapt=pc&fr=ftw#path=%252FC%25E8%25AF%25AD%25E8%25A8%2580

    你試過(guò)這樣寫(xiě)C程序嗎 --函數(shù)式編程
    < >

    我所偏愛(ài)的 C 語(yǔ)言面向?qū)ο缶幊谭妒剑骑L(fēng)
    http://blog.codingnow.com/2010/03/object_oriented_programming_in_c.html

    C語(yǔ)言面向?qū)ο缶幊?-- 6篇專(zhuān)欄
    http://blog.csdn.net/column/details/object-orient-c.html

    posted @ 2015-11-24 23:32 小高 閱讀(418) | 評(píng)論 (0)編輯 收藏

    導(dǎo)航

    <2015年11月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    統(tǒng)計(jì)

    常用鏈接

    留言簿(3)

    隨筆分類(lèi)(352)

    收藏夾(19)

    關(guān)注的blog

    手冊(cè)

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲综合最新无码专区| 男女男精品网站免费观看| 国产成人精品日本亚洲专区| 国产精品爱啪在线线免费观看| 国产成人无码免费网站| 亚洲色成人WWW永久在线观看| 亚洲va在线va天堂va四虎| 免费国产人做人视频在线观看| 波多野结衣在线免费视频| 久久免费视频观看| 成人a毛片免费视频观看| 亚洲中文字幕无码久久| 亚洲高清美女一区二区三区| 亚洲中文字幕不卡无码| 免费一级毛片一级毛片aa| 成人免费毛片内射美女-百度| 久久这里只精品热免费99| www免费黄色网| 男人j进女人p免费视频| 最新亚洲人成无码网www电影| 2020国产精品亚洲综合网| 亚洲午夜精品在线| 久久精品国产亚洲AV无码娇色| 亚洲AV无码一区东京热久久| 在线日韩日本国产亚洲| 亚洲 自拍 另类小说综合图区| 免费看少妇作爱视频| 毛片在线看免费版| www.999精品视频观看免费| xxxxwww免费| 久久午夜夜伦鲁鲁片免费无码影视 | 久久久无码精品亚洲日韩蜜臀浪潮| 久久亚洲2019中文字幕| 亚洲日本一区二区三区在线不卡| 免费看国产一级特黄aa大片| 日韩成人免费在线| 免费观看四虎精品国产永久| www国产亚洲精品久久久日本| 亚洲va中文字幕无码| 亚洲日韩在线观看| 亚洲最大激情中文字幕|