使用VS2008下除錯SGI STL原始碼
相信 很多C++的程式設計師都看過侯捷先生寫的《STL原始碼剖析》,即使沒看過,也有所聞。正如侯先生開篇所說:原始碼之前了無祕密。但有很多人只是看了這本書,沒有實踐跟進去了解具體的執行機理,沒有實踐的理論,總是不那麼深刻的。本文一步一步教你在本機上把SGI STL編譯並除錯。廢話少說,開始。
0. 前置條件:windowsXP或win7(我本機是win7,但說明裡明顯是說支援xp的),已經安裝VS2008(其他版本應該也可以,但我沒試過),有一定C++基礎,最好看過侯捷先生的《STL原始碼剖析》
1. 用VS2008新建一個控制檯程式,解決方案的名字不重要,你可以隨便起;我的工程名字叫SGI_STL,工程目錄為SlnDir/SGI_STL。你先編譯執行一下,如果沒問題就下一步。注:以下所有SlnDir都要替換成你解決方案的目錄名字。
2. 下載SGI STL原始碼 http://sourceforge.net/projects/stlport/ ;上面的名字是叫STLport,我使用的版本是 STLport-5.2.1。下載到本地然後解壓到目錄:SlnDir/SGI_STL/STLport-5.2.1/。我們的SlnDir/SGI_STL/目錄下面就有了這些檔案:
3. 我們進去STLport-5.2.1目錄下看到下列檔案(我這部分記憶體是直接貼了README的內容出來),看的懂就看,不懂就數數是不是這麼多檔案就行了。
This directory contains the STLport-5.0 release.
What's inside :
README - this file
INSTALL - installation instructions
bin - installation directory for STLport unit tests;
it may contain more subdirs, if you use
crosscompilation
build/lib - build directory for STLport library (if you use
STLport iostreams and/or locale only)
build/test/unit - build directory for regression (unit) tests
build/test/eh - build directory for exception handling tests
stlport - main STLport include directory
src - source for iostreams implementation and other parts
that aren' t pure template code
lib - installation directory for STLport library (if you
use STLport iostreams and/or locale only);
it may contain more subdirs, if you use
crosscompilation
test/unit - unit (regression) tests
test/eh - exception handling test using STLport iostreams
etc - miscellanous files (ChangeLog, TODO, scripts, etc.)
4. 從啟動程式裡啟動VS2008的命令列提示,用CD命令轉到SlnDir/SGI_STL/STLport-5.2.1/目錄下,輸入:configure msvc9 正常的話出來下面的結果,但注意系統版本顯示錯誤了,我的是win7但他顯示了winxp,不管,反正能通過。
5. 看到上面給出的提示了嗎?沒錯,進入到build/lib目錄下,輸入nmake clean install,後面就等幾分鐘編譯過程吧。
6. 編譯完畢,進入到SlnDir/SGI_STL/STLport-5.2.1/bin目錄下,應該有三個pdb檔案和三個dll檔案,把這六個檔案複製到SlnDir/SGI_STL/Debug目錄下面(當然你設定的輸出目錄不是這裡,你當然也應該明白放到哪裡合適)。
7. 現在還差兩步了,現在,在VS2008介面開啟Tools/Option如下面的介面,設定VC++ Directories,在Show directories for選擇Executable files. 新增加一項內容為SlnDir/SGI_STL\STLport-5.2.1\bin 並放到最上面; 選擇Include files新增加一項SlnDir\SGI_STL\STLport-5.2.1\stlport並放到最上面;選擇Library files,新增加一項內容為SlnDir\SGI_STL\STLport-5.2.1\lib;點選OK。
8. 最後一步了,在你剛才新建的工程裡面,開啟SGI_STL.cpp 程式碼如下:如果編譯執行沒問題,可以進行除錯了。
#include "stdafx.h"
#include "STLport-5.2.1/stlport/vector"
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<int> v;
v.push_back(2);
v.push_back(4);
return 0;
}
好吧,可以單步除錯進入程式碼中看了,開始你的SGI STL原始碼之旅吧!
相關推薦
使用VS2008下除錯SGI STL原始碼
相信 很多C++的程式設計師都看過侯捷先生寫的《STL原始碼剖析》,即使沒看過,也有所聞。正如侯先生開篇所說:原始碼之前了無祕密。但有很多人只是看了這本書,沒有實踐跟進去了解具體的執行機理,沒有實踐的理論,總是不那麼深刻的。本文一步一步教你在本機上把SGI STL編譯並除錯。
STL原始碼分析之deque 下
前言 前面兩節對deque基本所有的操作都分析了, 本節就分析deque的insert操作的實現. insert的過載函式有很多, 所以沒有在上節一起分析, 本節也只是對部分過載函式進行分析, 剩下的列出原始碼就行了. 原始碼分析 insert實現 這裡先將insert的
STL原始碼分析之slist有序容器 下
前言 上節我們對slist的基本構成, 構造析構做了分析, 本節 我們就來分析關於slist的基本元素操作. slist分析 基本屬性資訊 slist是隻有正向迭代, 所以只能直接獲取頭部的資料. template <class T, class Alloc =
STL原始碼分析之list有序容器 下
前言 前兩節對list的push, pop, insert等操作做了分析, 本節準備探討list怎麼實現sort功能. list是一個迴圈雙向連結串列, 不是一個連續地址空間, 所以sort功能需要特殊的演算法單獨實現, 而不能用演算法中的sort. 當然還可以將list的元素插
STL原始碼分析RB-tree關聯容器 下
前言 上節我們分析了關於RB-tree的迭代器實現, 其中最重要的功能都會在rb-tree結構中呼叫. 本節我們就來分析RB-tree結構. 再來複習一下紅黑樹的規則: 每個節點的顏色是黑色或者紅色 根節點必須是黑色的 每個葉節點(NULL)必須是黑色的
STL原始碼剖析---紅黑樹原理詳解下
轉載請標明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7760584 演算法導論書上給出的紅黑樹的性質如下,跟STL原始碼剖析書上面的4條性質大同小異。 1、每個結點或是紅色的,或是黑色的
vscode下除錯caffe原始碼
caffe目錄: ├── build -> .build_release // make生成目錄,生成各種可執行bin檔案,直接呼叫入口; ├── cmake ├── CMakeLists.txt ├── CONTRIBUTING.md ├── CONTRIBUTORS.md ├──
SGI STL sort()原始碼分析
首先將stl sort完整原始碼列如下所示: template <class _RandomAccessIter> inline void sort(_RandomAccessIter __first, _RandomAccessIter __last) {
SGI STL中string的原始碼解讀(3)
7. replace函式 replace函式是basic_string中一個最重要的函式,很多操作都是直接/間接通過replace完成,包括insert,erase,assignment等等。Repalce函式在basic_string中有多個過載的形式
STL原始碼——SGI 空間配置器
本文主要參考STL原始碼剖析,但書中對某些地方寫的不是很詳細,所以根據個人的理解增加了一些細節的說明,便於回顧。 由於小型區塊分配時可能造成記憶體破碎問題,SGI設計了兩級配置器,第一級配置器直接使用malloc和free,第二級配置器則視情況採取不同的策略:當配置的區塊超
SGI STL空間配置器(STL原始碼剖析)
空間配置器的標準介面(根據STL規範) allocator::value_typeallocator::pointerallocator::const_pointerallocator::referenceallocator::const_referencealloca
VS2008下安裝與配置DirectShow SDK 9.0 及 DirectShow AMCap改裝的問題
靜態庫 cfa -c class 文件目錄 call ref stat and 一、 安裝DirectShow。 我裝的是DirectShow SDK 9.0b。安裝程序名為DXSDK_Jun10.exe。 下載地址:https://pan.
SGI STL內存配置器存在內存泄漏嗎?
析構 溫故而知新 溫故 由於 默認 文件路徑 htm .com 成員 閱讀了SGI的源碼後對STL很是膜拜,很高質量的源碼,從中學到了很多。溫故而知新!下文中所有STL如無特殊說明均指SGI版本實現。 STL 內存配置器 STL對內存管理最核心部分我覺得是其將C++對象創建
SGI STL內存配置器(一):內存泄漏?
分解 產生 for void 客戶端 lin call free 創建過程 閱讀了Alexander大神的SGI STL源碼,膜拜,很高質量的源碼,獲益匪淺。溫故而知新!下文中所有STL如無特殊說明均指SGI版本實現。 STL 內存配置器 STL對內存管理最核心部分我覺得是
STL原始碼剖析——stack的實現原理和使用方法詳解
Stack 簡介 stack 是堆疊容器,是一種“先進後出”的容器。 stack 是簡單地裝飾 deque 容器而成為另外一種容器。 使用 stack 時需要加上標頭檔案 #include<s
STL原始碼剖析——deque的實現原理和使用方法詳解
Deque 簡介 deque是“double—ended queue”的縮寫,和vector一樣都是STL的容器,deque 是雙端陣列,而 vector 是單端的。 deque 在介面上和 vector 非常相似,在許多操作的地方
STL原始碼剖析——序列式容器
序列式容器 所謂序列化容器,其中的元素都可序,但未必有序。C++語言本省提供了一個序列式容器array,STL另外提供了vector,list,deque,stack,queue,priority_queue等序列式容器。其中stack和queue由於只是將deque作為底層
imx6dl下除錯sgtl5000總結
配置裝置樹: [email protected]:~# aplay -c 2 -t wav -f S16_LE -v /media/mmcblk1p1/cc.wav Playing WAVE '/med
list原始碼3(參考STL原始碼--侯捷):push_front、push_back、erase、pop_front、pop_back、clear、remove、unique
push_front() //插入一個節點,作為頭結點 void push_front(const T& x){insert(begin(),x);} push_back() //插入一個節點,作為尾節點 void push_back(const T &x){insert
STL原始碼剖析——list容器的排序演算法sort()
原文:https://blog.csdn.net/chenhanzhun/article/details/39337331 前言 由於STL本身的排序演算法sort接受的輸入迭代器是隨機訪問迭代器,但是雙向list連結串列容器的訪問方式是雙向迭代器,因此,不能使用