青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天衣有縫

冠蓋滿京華,斯人獨憔悴~
posts - 35, comments - 115, trackbacks - 0, articles - 0
   :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

OS調試相關的工具(附圖,原創)

Posted on 2007-06-28 11:02 天衣有縫 閱讀(3888) 評論(6)  編輯 收藏 引用 所屬分類: os stuff
部分觀點可能過于激進,讀者自行取舍。盡管我認為程序是寫出來的,不是調出來的(和市場上的觀點正好相反),優質的程序應該在模塊設計和實現時應保證不出現什么bug。這當然只是理想情況,還得取決于個人水平。程序應在實現階段得到最大保證,而不是過度依賴調試器。一個徹底的反調試派,據說真正的高手會在cpu旁放一顆爆米花:)轉載請保留原創:http://www.shnenglu.com/jinglexy,MSN & Email:jinglexy at yahoo dot com dot cn

如果系統處于仿真的初期節點,例如操作系統的初始化,調試還是很有必要的。這里是我在linux環境調試操作系統的相關工具,os開發者可參考,歡迎指正:)
(1)工具安裝:
linux安裝:bochs-2.3,insight-6.6,gcc-3.4(使用g++和as(binutils包中))
windows安裝:Xmanager Enterprise2.1
因為網管沒有lotus和clearcase在linux系統下的支持,所以只好用兩個操作系統了。這樣也比較好,一個用于program,一個用于調試,畢竟bochs挺耗cpu的,就讓她干活好了。
bochs安裝:./configure --with-all-libs --enable-vbe --enable-gdb-stub && make && make install
insight-6.6安裝:包含了tck/tk,gdb-6.6,bfd等工具,使用insight時最好這樣設置環境變量:
export LC_ALL=en_US
否則運行時可能會報錯:
Tcl_Init failed: can't read "env(TCL_LIBRARY)": no such variable
配置xserver用于遠程訪問Linux圖形界面,這樣可以在windows上通過ssh執行linux的圖形界面程序。


(2)相關文件:
bochs配置文件添加如下節:
gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0

gdb調試腳本:
gdb的命令集可以寫入到一個文件中去,這樣避免了在啟動時輸入一大堆命令,100%鼠標操作?faint
保存所有命令到一個文件,每行一個命令,如下:
file ./vmjinix
target remote 127.0.0.1:1234
dir  ./arch/i386
dir  ./init
dir  ./kernel
dir  ./drivers
dir  ./drivers/video
dir  ./drivers/video/console
show dir
break start_kernel
continue
list 0
gdb和gdb前端執行如下:
gdb -q -x gdb.command
insight -q -x gdb.command

其他腳本(磁盤自動創建分區,自動安裝grub,拷貝內核,及Makefile腳本),這些貼出來太長,花了好幾個小時寫好的,需要可以和我聯系(MSN & Email:jinglexy at yahoo dot com dot cn)

(3)調試方法
將內核(jinix-1.2.1是我正在編寫的一個C++ 開源OS,歡迎參與)拷貝到linux主機,配置samba共享,這樣可以在windows上開發(推薦使用slickedit 2007,哪位有linux上的2007版本可否發一個給我)。
使用xshell(ssh方式)登錄到linux主機上,編譯和調試都在這里了。
在ssh上執行bochs -f bochsrc.txt.linux,
在ssh上執行insight -q -x gdb.command
截圖如下:



匯編語言節點也可用使用bochs+gdb調試,在gdb斷點時候執行:
disassemble $pc $pc+100(從當前斷點處反匯編100字節)
需要注意的是,在os的匯編初始化的前期階段,分頁機制往往未開啟,符號和地址不能一一對應,
這個時候不能進行源碼級匯編調試,只能用最即便的反匯編調試了。
bochs-2.3中好像有個bug沒有解決,nexti執行和stepi在call的時候居然一樣,如果要斷點到指定行,可以使用物理地址斷點。

(4)文章會不斷更新,如有什么好的想法可以在原博客討論:
http://www.shnenglu.com/jinglexy

(5)整理的一份常用gdb指令
x  /4wx ds:0x1234            x是線性地址空間
xp /4wx 0x1234                xp是物理地址空間
backtrace
print  variable                打印變量值
print  variable@10            打印變量后面的10個整數值
set    variable=2            賦值
whatis variable                顯示變量類型
ptype  variable                顯示數據結構(變量類型加強版)

斷點類型:
break init_kernel.cpp:start_kernel    斷點在文件的函數
break init_kernel.cpp:101        斷點在文件的101行
break init_kernel.cpp:101 if var==100    條件斷點
break *0xc0102030
info break                查看所有斷點
delete breakpoint 3
delete breakpoint            刪除所有斷點
isable breakpoint 2
enable breakpoint 2


search string1                搜索字符串,從list結束行開始
reverse-search string1            方向搜索
set history expansion on        使用歷史命令
clear                    刪除剛才停止處的斷點
continue                從斷點開始繼續執行
info break                顯示當前斷點清單,包括到達斷點處的次數等
info files                顯示被調試文件的詳細信息
info func                顯示所有的函數名稱
info local                顯示當函數中的局部變量信息
info prog                顯示被調試程序的執行狀態
info var                顯示所有的全局和靜態變量名稱
info all
run
continue
step, next, stepi, nexti        i后綴表示執行一條匯編指令

/*********************************************************************************
                                      格式說明                                   /
/*********************************************************************************
x  /nuf addr檢查位于線性地址addr處的內存內容,若addr不指定,則默認為下一個單元地址。
xp /nuf addr檢查位于物理地址addr處的內存內容。
其中的可選參數n、u和f的分別可為:
n欲顯示內存單元的計數值,默認值為1。
u表示單元大小,默認選擇為'w':
b (Bytes)1字節;
h (Halfwords)2字節;
w (Words)4字節;
g (Giantwords)8字節。
注意:這些縮略符與Intel的不同,主要是為了與GDB調試器的表示法一致。
f顯示格式,默認選擇為'x':
x (hex)顯示為十六進制數(默認選擇);
d (decimal)顯示為十進制數;
u (unsigned)顯示成無符號十進制數;
o (octal)顯示成八進制數;
t (binary)顯示成二進制數。
c (char)顯示字節代碼對應的字符。若不是可顯示字符代碼,就直接顯示代碼。
*********************************************************************************/

說明一下:bochs 和 insight本身單個執行就非常慢,而且insight是通過ssh方式鏈接遠程xserver執行,所以速度巨慢,本文所述完全可以全部在linux上操作,不限于平臺。


Feedback

# re: OS調試相關的工具(附圖,原創)  回復  更多評論   

2007-06-28 12:05 by eXile
據說對于使用XP編程的人來說,使用調試器是可恥的行為。。。

# re: OS調試相關的工具(附圖,原創)  回復  更多評論   

2007-06-28 12:27 by 天衣有縫
沒錯:)
調試器和ide一樣應該被批判(辨正批判),不要過分依賴就行了,不少程序員因為工具強大而降低了編碼的質量。正如《unix編程藝術》中所說,c++程序員往往設計出更厚重的膠合層,這并非語言的過錯,但是設計人員卻傾向與此,這樣做的理由是c++比c強大

當然,凡事都有兩面性

# re: OS調試相關的工具(附圖,原創)  回復  更多評論   

2007-06-28 20:30 by bgate
其實其實直接用windows就可以調試,
用bochs在windows上運行調試內核,

# re: OS調試相關的工具(附圖,原創)  回復  更多評論   

2007-06-29 08:37 by 天衣有縫
單獨用bochs我只知道匯編調試功能,如果要基于c/c++調試,不加gdb肯定是不行的。
你說的應該是cygwin下面把。

# re: OS調試相關的工具(附圖,原創)  回復  更多評論   

2007-06-29 21:25 by bgate
當然是要gdb了.
gdb + bochs + insight
只要用cygwin編譯帶gdb-stub的bochs就可以了.

# re: OS調試相關的工具(附圖,原創)  回復  更多評論   

2007-06-29 21:51 by 天衣有縫
這樣做也是可以的,可能速度會快一些,我這里正好有兩臺linux主機,所以就拿過來用了,呵
歡迎交流指正:)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品九九久久久久久久| 午夜伦欧美伦电影理论片| 欧美视频中文在线看| 欧美二区在线播放| 欧美激情精品久久久久久久变态 | 夜夜嗨av一区二区三区| 欧美电影打屁股sp| 久久这里只精品最新地址| 亚洲欧美中日韩| 久久成人在线| 欧美国产日本韩| 亚洲区第一页| 亚洲欧美美女| 久久久久久亚洲综合影院红桃| 欧美一区二区三区在线看| 久久裸体视频| 欧美理论在线播放| 国产精品日韩欧美综合| 在线观看中文字幕不卡| 亚洲视频中文字幕| 久久女同互慰一区二区三区| 亚洲国产日韩在线一区模特| 亚洲在线第一页| 欧美日韩国产成人高清视频| 国产午夜精品视频| 99热这里只有精品8| 亚洲第一区在线| 亚洲免费在线观看| 欧美日韩精品欧美日韩精品 | 国产一级揄自揄精品视频| 亚洲精品之草原avav久久| 亚洲欧美日韩在线一区| 欧美成人嫩草网站| 亚洲一线二线三线久久久| 欧美另类极品videosbest最新版本 | 久久国产精品一区二区| 欧美精品一区二区三| 国产亚洲激情| 久久激情视频免费观看| 亚洲尤物视频在线| 国产精品亚洲网站| 久久精品视频在线观看| 久久天天躁夜夜躁狠狠躁2022 | 在线视频免费在线观看一区二区| 亚洲精品免费在线观看| 欧美日韩精品中文字幕| 亚洲精品久久久久久久久久久久久| 欧美高清在线观看| 欧美精品系列| 亚洲女同精品视频| 久久亚洲不卡| 亚洲一区二区黄色| 久久精品成人| 亚洲一二三四区| 久久久人成影片一区二区三区观看| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久久水蜜桃| 欧美一级视频| 欧美日韩一区高清| 久久人人九九| 国产精品无码永久免费888| 欧美成人高清| 国产综合av| 亚洲色无码播放| 亚洲高清在线播放| 欧美一区二区三区在线看| 亚洲一区二区免费看| 欧美mv日韩mv国产网站| 久久亚洲欧美国产精品乐播| 国产精品试看| 亚洲直播在线一区| 小处雏高清一区二区三区| 欧美日一区二区在线观看| 亚洲人成毛片在线播放| 亚洲精品一二| 欧美日韩第一页| 这里只有精品视频| 亚洲永久免费观看| 国产精一区二区三区| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美在线一二三| 欧美+日本+国产+在线a∨观看| 国产精品私人影院| 久久久久久婷| 亚洲日本免费电影| 午夜精品成人在线| 国产欧美一区二区三区久久人妖 | 欧美国产综合视频| 亚洲理论在线观看| 欧美伊人久久| 亚洲国产裸拍裸体视频在线观看乱了中文 | 久久亚洲精品伦理| 99视频一区二区三区| 久久精品国产v日韩v亚洲| 亚洲电影在线| 国产精品色婷婷久久58| 欧美一区久久| 一区二区免费在线播放| 蜜臀a∨国产成人精品| 亚洲一区激情| 日韩视频一区二区三区在线播放| 国产精品一区二区男女羞羞无遮挡| 久久久午夜电影| 欧美一区二区三区免费大片| 亚洲乱码精品一二三四区日韩在线| 性欧美长视频| 亚洲欧美影音先锋| 亚洲网站在线播放| 亚洲视频axxx| 亚洲午夜国产成人av电影男同| 亚洲激情视频网站| 亚洲人体大胆视频| 91久久精品久久国产性色也91 | 欧美激情一区二区三级高清视频| 久久久无码精品亚洲日韩按摩| 亚洲午夜在线观看| 在线一区免费观看| 国产精品美腿一区在线看| 国产精品久久久久aaaa九色| 国产精品xxxav免费视频| 欧美另类视频| 国产精品亚洲综合久久| 国产精品国产自产拍高清av王其| 国产精品网红福利| 一色屋精品亚洲香蕉网站| 亚洲成在人线av| 99re66热这里只有精品3直播| 亚洲美女在线一区| 99精品视频免费全部在线| 亚洲一级高清| 欧美大色视频| 亚洲欧美日产图| 美女亚洲精品| 国产九九精品视频| 亚洲国产经典视频| 亚洲一区三区在线观看| 久久香蕉国产线看观看av| 亚洲国产欧美日韩精品| 欧美一区二区免费| 国产精品激情| 亚洲一区二区在线看| 欧美成人国产| 午夜久久久久久| 欧美特黄一级大片| 亚洲精美视频| 最新热久久免费视频| 久久久女女女女999久久| 国产欧美激情| 久久大香伊蕉在人线观看热2| 亚洲黄色成人| 美女黄色成人网| 亚洲国产精品久久久| 久久九九热re6这里有精品| 制服诱惑一区二区| 欧美婷婷在线| 欧美在线视频导航| 亚洲小视频在线观看| 欧美天天综合网| 午夜精品www| 欧美一区二区日韩| 在线观看国产精品淫| 欧美看片网站| 久久久久国产一区二区三区四区| 久久精品1区| 妖精成人www高清在线观看| 一本色道久久综合亚洲二区三区| 欧美精品成人在线| 亚洲欧美视频在线| 久久国产精品亚洲va麻豆| 亚洲欧洲在线视频| 夜夜嗨av色综合久久久综合网| 国产精品久久久亚洲一区| 久久噜噜亚洲综合| 性色av一区二区怡红| 久久精品日产第一区二区三区| 亚洲激情欧美| 欧美一区二区三区在线免费观看| 亚洲美女av在线播放| 欧美一区二区三区在线观看视频| 亚洲黄色一区二区三区| 欧美一级网站| 亚洲天堂免费在线观看视频| 久久精品主播| 亚洲免费在线精品一区| 欧美高清视频在线| 欧美成人精品在线观看| 国内精品久久久久久影视8 | 欧美日本一区二区三区| 国产一区二区中文| 亚洲无玛一区| 亚洲免费视频一区二区| 欧美三级电影网| 亚洲日本免费| 亚洲视频免费观看| 欧美日韩精品一区二区三区四区 | 91久久午夜| 日韩视频永久免费观看| 久久久久久黄| 免费黄网站欧美| 亚洲国产日韩精品|