亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gexmap.cpp

?? 內存管理工具Exmap。該工具比 ps 或 top 更精確
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/* * (c) John Berthels 2005 <jjberthels@gmail.com>. See COPYING for license. */#include <gtkmm.h>#include <gtkmm/window.h>#include "Exmap.hpp"#include "jutil.hpp"#include <boost/shared_ptr.hpp>#include <sstream>#include <iostream>#include <list>namespace Gexmap{    typedef boost::shared_ptr<Gtk::Widget> WidgetPtr;        /// Abstract base class for all the list. This will automatically    /// add in the columns needed for 'Sizes' after those added by the    /// subclass, as well as setting up conveniences such as    /// scrollbars, sortable columns etc.    class SizeListView : public Gtk::Frame    {    public:	SizeListView(const std::string &frame_name);	virtual ~SizeListView();	Gtk::TreeView &listwin();	void update_view();    protected:	/// Call this from your ctor, after adding your columns to	/// _coluns.	void init_store_and_view();	/// Call this from your ctor, after appending your columns to	/// the treeview.	void init_columns();	/// When creating a new Row, call this to add in the values	/// for the Sizes.	void add_row_sizes(Gtk::TreeModel::Row &row,			   Exmap::SizesPtr &sizes);	/// Show the list view (hiding the label), and clear the store	void show_list();	/// Show the label, with this text (hiding the list)	void show_label(const std::string &txt);	/// True if we are showing the list, false if the label	bool showing_list;		Glib::RefPtr<Gtk::ListStore> _store;	// We display either the treeview or the errlabel	Gtk::TreeView _treeview;	Gtk::Label _errlabel;		// Hack: reparent the unused child widget to here	Gtk::Frame _hidden;	/// In the derived class, add columns definitions to this	/// record in your ctor.	Gtk::TreeModel::ColumnRecord _columns;    private:	Gtk::TreeModelColumn<float> _size_columns[Exmap::Sizes::NUM_SIZES];	void _make_all_sortable();	static std::string SIZES_PRINTF_FORMAT;	Gtk::ScrolledWindow _scrolled_window;    };    typedef boost::shared_ptr<SizeListView> SizeListViewPtr;    /// Abstract base class for showing processes in a list    class ProcList : public SizeListView    {    public:	ProcList(const std::string &frame_name);	pid_t currently_selected();    protected:	void add_row(pid_t pid,		     const std::string &cmdline,		     Exmap::SizesPtr &sizes);	Gtk::TreeModelColumn<pid_t> _pid;	Gtk::TreeModelColumn<Glib::ustring> _cmdline;    };	    /// Concrete subclass for showing a top-level list of processes    class AllProcList : public ProcList    {    public:	AllProcList();	void set_data(const std::list<Exmap::ProcessPtr> &procs);    private:	Exmap::SizesPtr calc_totals(const std::list<Exmap::ProcessPtr> &procs);    };        /// Concrete subclass for showing the list of process which map a file    class PerFileProcList : public ProcList    {    public:	PerFileProcList();	void set_data(const Exmap::FilePtr &file);    };        class AllFileList : public SizeListView    {    public:	AllFileList();	void set_data(const std::list<Exmap::FilePtr> &files);	std::string currently_selected();    private:	Gtk::TreeModelColumn<Glib::ustring> _filename;	Gtk::TreeModelColumn<int> _nprocs;    };        /// Concrete subclass for showing all files within a process    class PerProcFileList : public SizeListView    {    public:	PerProcFileList();	void set_data(const Exmap::ProcessPtr &proc);	std::string currently_selected();    private:	Gtk::TreeModelColumn<Glib::ustring> _filename;    };        /// Concrete subclass for showing the elf sections for a specific    /// process and file.    class ElfSectionList : public SizeListView    {    public:	ElfSectionList();	Gtk::TreeModelColumn<Glib::ustring> _name;	Gtk::TreeModelColumn<off_t> _file_offset;	void set_data(const Exmap::ProcessPtr &proc,		      const Exmap::FilePtr &file);	std::string currently_selected();    };        /// Concrete subclass for showing the elf symbols for a specific    /// process, file and elf section    class ElfSymbolList : public SizeListView    {    public:	ElfSymbolList();	Gtk::TreeModelColumn<Glib::ustring> _name;	void set_data(const Exmap::ProcessPtr &proc,		      const Exmap::FilePtr &file,		      const Elf::SectionPtr &section);    };    /// Abstract base class for the file and proc tabs    class ExmapTab : public Gtk::VPaned    {    public:	ExmapTab();	virtual void set_data(Exmap::SnapshotPtr &snapshot) = 0;    protected:	Gtk::VPaned _top_half;	Gtk::VPaned _bottom_half;	// Internal data	Exmap::SnapshotPtr _snapshot;	// Widgets	ElfSectionList _sectionlist;	ElfSymbolList _symlist;    };    /// The 'Files' Tab    class FileTab : public ExmapTab    {    public:	FileTab();	void set_data(Exmap::SnapshotPtr &snapshot);    private:	// Callbacks	void filelist_changed_cb();	void proclist_changed_cb();	void sectionlist_changed_cb();		// Widgets	AllFileList _allfilelist;	PerFileProcList _proclist;    };    /// The 'Processes' Tab    class ProcTab : public ExmapTab    {    public:	ProcTab();	void set_data(Exmap::SnapshotPtr &snapshot);    private:	// Callbacks	void proclist_changed_cb();	void filelist_changed_cb();	void sectionlist_changed_cb();		// Widgets	AllProcList _allproclist;	PerProcFileList _filelist;    };    /// Status and button bar    class BottomBar : public Gtk::HBox    {    public:	BottomBar();	void set_status(Exmap::SnapshotPtr &snapshot);    private:	Gtk::Label _plabel;	Gtk::Label _flabel;	Gtk::Button _quit_button;	// Callbacks	void quit_button_clicked_cb();    };        /// The main, toplevel window    class TopWin : public Gtk::Window    {    public:	TopWin(Exmap::SnapshotPtr &snapshot);	static const int WIDTH = 800;	static const int HEIGHT = 600;    private:	// Internal data	Exmap::SnapshotPtr _snapshot;	// Widgets	ProcTab _proctab;	FileTab _filetab;	Gtk::Notebook _notebook;	Gtk::VBox _vbox;	BottomBar _bottom_bar;    };    };using namespace std;using namespace jutil;using namespace Exmap;using namespace Gexmap;// ------------------------------------------------------------TopWin::TopWin(SnapshotPtr &snapshot)    : _snapshot(snapshot){    add(_vbox);    _notebook.append_page(_proctab, "Processes");    _notebook.append_page(_filetab, "Files");    _vbox.add(_notebook);    _vbox.pack_end(_bottom_bar, false, false);    _proctab.set_data(snapshot);    _filetab.set_data(snapshot);        set_default_size(WIDTH, HEIGHT);    _bottom_bar.set_status(_snapshot);    show_all();}// ------------------------------------------------------------BottomBar::BottomBar(){    _quit_button.set_label("Quit");    _quit_button.signal_clicked()	.connect(sigc::mem_fun(*this, &BottomBar::quit_button_clicked_cb));    add(_plabel);    add(_flabel);    pack_end(_quit_button, false, false);}void BottomBar::quit_button_clicked_cb(){    Gtk::Main::quit();}void BottomBar::set_status(SnapshotPtr &snapshot){    stringstream sstr;    sstr << "Number of procs: " << snapshot->procs().size();    _plabel.set_text(sstr.str());    sstr.str("");    sstr << "Number of files: " << snapshot->files().size();    _flabel.set_text(sstr.str());}// ------------------------------------------------------------SizeListView::SizeListView(const std::string &frame_name)    : Gtk::Frame(frame_name),      showing_list(true){    _hidden.add(_errlabel);    _scrolled_window.add(_treeview);    _scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);    add(_scrolled_window);    _errlabel.show();    _scrolled_window.show_all();}Gtk::TreeView &SizeListView::listwin(){    return _treeview;}SizeListView::~SizeListView(){ }void SizeListView::init_columns(){    Glib::RefPtr<Gtk::TreeModel> model = _treeview.get_model();    int sort_colid = -1;    for (int i = 0; i < Exmap::Sizes::NUM_SIZES; ++i) {	int colid = _treeview.append_column_numeric(Exmap::Sizes::size_name(i),						    _size_columns[i],						    SIZES_PRINTF_FORMAT);		// Remember the number of columns first time round the loop	if (sort_colid < 0) {	    sort_colid = colid - 1;	}    }        _make_all_sortable();    _store->set_sort_column_id(sort_colid, Gtk::SORT_DESCENDING);}void SizeListView::_make_all_sortable(){    int ncols = _columns.size();    Gtk::TreeViewColumn *col;        for (int i = 0; i < ncols; ++i) {	col = _treeview.get_column(i);	col->set_sort_column(i);    }    return;}void SizeListView::init_store_and_view(){    for (int i = 0; i < Exmap::Sizes::NUM_SIZES; ++i) {	_columns.add(_size_columns[i]);    }    _store = Gtk::ListStore::create(_columns);    _treeview.set_model(_store);}void SizeListView::add_row_sizes(Gtk::TreeModel::Row &row,				 Exmap::SizesPtr &sizes){    for (int i = 0; i < Exmap::Sizes::NUM_SIZES; ++i) {	row[_size_columns[i]] = sizes->sval(i);    }}// We scale to kbytes, so support 4G => 4000000-ish max => 7 leading// digits, plus 2 digits after decimal pt plus the pt = 10 chars in// total.string SizeListView::SIZES_PRINTF_FORMAT("%.2f");void SizeListView::show_label(const string &txt){    _errlabel.set_text(txt);    if (!showing_list) { return; }    Gtk::Frame tmp;    _errlabel.reparent(tmp);    _scrolled_window.reparent(_hidden);    _errlabel.reparent(*this);    showing_list = false;}void SizeListView::show_list(){    _store->clear();    if (showing_list) { return; }    Gtk::Frame tmp;    _scrolled_window.reparent(tmp);    _errlabel.reparent(_hidden);    _scrolled_window.reparent(*this);    showing_list = true;}// ------------------------------------------------------------ProcList::ProcList(const std::string &frame_name)    : SizeListView(frame_name){    _columns.add(_pid);    _columns.add(_cmdline);    init_store_and_view();    _treeview.append_column("PID", _pid);    _treeview.append_column("Cmdline", _cmdline);    init_columns();}    pid_t ProcList::currently_selected(){    Glib::RefPtr<Gtk::TreeSelection> sel = listwin().get_selection();    Glib::RefPtr<Gtk::TreeModel> model = listwin().get_model();    pid_t pid = 0; // invalid    if (sel->count_selected_rows() == 1) {	Gtk::TreeModel::iterator iter = sel->get_selected(model);	if (iter) {	    Gtk::TreeModel::Row row = *iter;	    pid = row.get_value(_pid);	}    }    return pid;}void ProcList::add_row(pid_t pid, const string &cmdline, SizesPtr &sizes){    Gtk::TreeModel::Row row = *(_store->append());    row[_pid] = pid;    row[_cmdline] = cmdline;    add_row_sizes(row, sizes);}// ------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
777午夜精品免费视频| 亚洲色欲色欲www| 亚洲视频在线一区| 久久www免费人成看片高清| 色婷婷香蕉在线一区二区| 久久久噜噜噜久久中文字幕色伊伊| 亚洲国产毛片aaaaa无费看| 成a人片亚洲日本久久| 精品粉嫩超白一线天av| 亚洲影院在线观看| 一本久久a久久精品亚洲| 亚洲国产精品av| 国产成a人无v码亚洲福利| 精品福利一二区| 久久成人精品无人区| 日韩一区二区高清| 丝袜美腿成人在线| 欧美日韩国产综合一区二区 | 中文字幕一区在线观看| 久久不见久久见免费视频7| 欧美精品vⅰdeose4hd| 亚洲一区二区三区中文字幕在线| 91视视频在线直接观看在线看网页在线看| 日韩精品一区二区三区视频播放| 日韩精品1区2区3区| 制服丝袜在线91| 三级欧美韩日大片在线看| 欧美美女喷水视频| 五月婷婷综合在线| 日韩一区二区影院| 韩国成人精品a∨在线观看| 26uuu久久天堂性欧美| 国产中文一区二区三区| 国产女主播一区| av亚洲精华国产精华精华| 中文字幕亚洲区| 日本电影亚洲天堂一区| 天天操天天色综合| 日韩久久精品一区| 国产精品一区二区不卡| 中文字幕精品综合| 色婷婷亚洲婷婷| 天堂蜜桃一区二区三区| 精品电影一区二区| 成人一区二区三区在线观看| 亚洲精品成人少妇| 51久久夜色精品国产麻豆| 久久天堂av综合合色蜜桃网| 亚洲一区二区在线视频| 91精品在线麻豆| 国产伦精品一区二区三区视频青涩| 久久久.com| gogo大胆日本视频一区| 亚洲不卡av一区二区三区| 日韩精品一区在线观看| 国产99久久久国产精品潘金网站| 亚洲精品欧美综合四区| 欧美一级免费大片| 福利电影一区二区三区| 午夜视频在线观看一区二区 | 懂色av中文字幕一区二区三区| 亚洲人成小说网站色在线| 欧美精品乱码久久久久久按摩| 精品一区二区三区视频在线观看 | 久久久久88色偷偷免费| 91黄色免费看| 国产精品主播直播| 亚洲精品久久久久久国产精华液| 日韩亚洲欧美一区二区三区| 成人av免费在线| 蜜臀99久久精品久久久久久软件| 国产精品视频免费看| 欧美一区二区三区在线| 95精品视频在线| 久久精品国产77777蜜臀| 一区二区三区成人| 亚洲国产高清不卡| 欧美一区二区啪啪| 欧美亚洲一区二区在线| 丁香啪啪综合成人亚洲小说 | 91一区一区三区| 久久99日本精品| 亚洲国产成人av网| 一区在线播放视频| 久久亚洲一级片| 日韩欧美黄色影院| 欧美日韩精品三区| 日本黄色一区二区| 99热在这里有精品免费| 国产毛片精品视频| 精品一区二区三区的国产在线播放 | 丁香婷婷综合五月| 激情另类小说区图片区视频区| 婷婷亚洲久悠悠色悠在线播放| 国产精品久久久久一区二区三区| 日韩三级精品电影久久久 | 日本欧美加勒比视频| 亚洲综合一区二区三区| 综合亚洲深深色噜噜狠狠网站| www精品美女久久久tv| 91精品国产色综合久久ai换脸| 日本电影亚洲天堂一区| 97久久超碰精品国产| hitomi一区二区三区精品| 国产99久久久国产精品| 制服丝袜成人动漫| 欧洲精品一区二区| 色哦色哦哦色天天综合| 99精品视频一区二区| 成人黄色一级视频| 成人激情小说网站| 成人福利视频网站| 成人精品视频一区| av中文一区二区三区| 色综合久久中文字幕综合网| av激情亚洲男人天堂| 91美女视频网站| 欧美性xxxxx极品少妇| 欧美乱妇15p| 精品乱人伦小说| 中文字幕成人在线观看| 日韩伦理电影网| 亚洲成a人v欧美综合天堂下载| 亚洲成av人片| 久草在线在线精品观看| 国产风韵犹存在线视精品| av电影天堂一区二区在线| 91国内精品野花午夜精品| 在线播放91灌醉迷j高跟美女| 91精品蜜臀在线一区尤物| 91在线国内视频| 日本欧美在线观看| 久久99国产精品久久| 国产乱国产乱300精品| 处破女av一区二区| 日本丶国产丶欧美色综合| 欧美日韩成人综合| 久久夜色精品一区| 一区二区三区在线看| 秋霞av亚洲一区二区三| 国产成人自拍高清视频在线免费播放| 午夜激情一区二区| 欧美精品一区二区三区高清aⅴ | 日本高清视频一区二区| 久久久精品免费免费| 免费在线看一区| 91麻豆精品国产| 亚洲国产精品欧美一二99| 色综合一个色综合| 久久不见久久见免费视频1| 国产嫩草影院久久久久| 日韩高清不卡一区二区三区| 色综合久久综合| 中文字幕一区二区三区在线观看| 韩国女主播一区| 日韩免费看的电影| 免费在线看一区| 日韩一级欧美一级| 蜜桃91丨九色丨蝌蚪91桃色| 日韩写真欧美这视频| 日本中文在线一区| 日韩欧美高清在线| 国模一区二区三区白浆| 久久九九影视网| 丰满白嫩尤物一区二区| 国产精品欧美一区喷水| 成人少妇影院yyyy| 亚洲区小说区图片区qvod| 色综合天天在线| 亚洲综合精品自拍| 制服丝袜亚洲精品中文字幕| 日产欧产美韩系列久久99| 精品美女被调教视频大全网站| 狠狠色丁香久久婷婷综合丁香| 国产色产综合色产在线视频| 成人高清在线视频| 一区二区视频在线| 欧美精品在线一区二区三区| 免费观看一级特黄欧美大片| 色偷偷久久人人79超碰人人澡 | 日韩理论片一区二区| 不卡视频在线看| 亚洲黄色尤物视频| 7777精品伊人久久久大香线蕉最新版| 青椒成人免费视频| 久久免费电影网| 色综合久久中文综合久久牛| 日日夜夜精品免费视频| 久久久久久久网| 91丨porny丨在线| 五月天激情小说综合| 久久久久久日产精品| 色呦呦日韩精品| 蜜臀av国产精品久久久久| 国产精品午夜在线| 91久久线看在观草草青青| 另类人妖一区二区av| 综合欧美一区二区三区| 日韩欧美123| 色偷偷久久一区二区三区|