當前位置:首頁 » 編程軟體 » 編譯抓取

編譯抓取

發布時間: 2022-07-27 15:09:39

① 如何實現工業機器人編程抓取

機器人編程語言詳解

計算機視覺程序員會給出不同於認知機器人的答案。每個人都不同意什麼是「最好的編程語言」,語言首先學習,即使這是最現實的答案,因為它取決於您要開發的應用程序類型以及您正在使用的系統。

機器人十大流行編程語言

世界上有超過1500種編程語言,這是目前機器人技術中十種最流行的編程語言。每種語言對機器人有不同的優勢:

10.BASIC/帕斯卡

BASIC和Pascal,它們是幾種工業機器人語言的基礎,如下所述。BASIC是為初學者設計的(它代表初學者通用符號指令代碼),這使它成為一個非常簡單的語言開始。帕斯卡爾旨在鼓勵良好的編程習慣小號,並介紹構造,如指針,它一個很好的「敲門磚」,從普通版使一個更復雜的語言。這幾天,這兩種語言都有點過時,有利於「日常使用」。但是,如果要進行大量的低級編碼,或者想要熟悉其他工業機器人語言,可以學習它們。

9.工業機器人語言

幾乎每個機器人製造商都開發了自己的專有機器人編程語言。您可以通過學習Pascal熟悉其中的幾個。但是,您每次開始使用新的機器人時,仍然需要學習新的語言。

ABB擁有RAPID編程語言。Kuka有KRL(Kuka Robot Language)。Comau使用PDL2,安川使用INFORM和川崎使用AS。然後,Fanuc機器人使用Karel,Stäubli機器人使用VAL3和Universal Robots使用URScript。

近年來,像ROS Instrial這樣的編程選項開始為程序員提供更多的標准化選項。但是,如果您是技術人員,則您更有可能使用製造商的語言。

8.LISP

LISP是世界上第二大最古老的編程語言(FORTRAN年齡較大,但只有一年)。它不像這個列表上許多其他編程語言那麼廣泛使用;然而,在人工智慧編程中仍然非常重要。ROS的一部分是用LISP編寫的,盡管你不需要知道使用ROS。

7.硬體描述語言(HDL)

硬體描述語言基本上是描述電子設備的編程方式。這些語言對於一些機器人專家來說是相當熟悉的,因為它們用於編程現場可編程門陣列(FPGA)。FPGA允許您開發電子硬體,而無需實際生產硅晶元,這使得它們成為更快更容易的一些開發選擇。

如果你不是電子原型,你可能永遠不會使用HDL。即使如此,重要的是知道它們存在,因為它們與其他編程語言完全不同。一方面,所有操作都是並行執行的,而不是依照基於處理器的語言進行。

6.裝配

大會允許您以「一級和零級」進行編程,這是最低級別(或多或少)的編程,最近大多數低級別的電子設備都需要編程,隨著Arino等的興起微控制器,您現在可以使用C / C ++輕松地在這個級別進行編程,這意味著大部分機器人可能不那麼必要。

5.MATLAB

MATLAB及其開放源碼的親戚,如Octave,是非常受歡迎的一些機器人工程師分析數據和開發控制系統。還有一個非常受歡迎的機器人工具箱用於MATLAB。我知道使用MATLAB開發整個機器人系統的人。如果要分析數據,生成高級圖形或實現控制系統,您可能需要學習MATLAB。

4.C#/.NET

C#是Microsoft提供的專有編程語言。我在這里包括C#/ .NET,主要是因為使用它作為主要語言的Microsoft Robotics Developer Studio。如果你要使用這個系統,你可能要使用C#。但是,首先學習C / C ++可能是長期發展編碼技巧的好選擇。

3.java

一些計算機科學學位將Java教學作為他們的第一種編程語言。Java從程序員「隱藏」底層的內存功能,這使得它比C更容易編程,但這也意味著你對代碼實際做的不太了解。如果您從計算機科學的背景(許多人,特別是在研究中)來到機器人,你可能已經學會了Java。像C#和MATLAB一樣,Java是一種解釋語言,這意味著它不會被編譯成機器代碼。相反,Java虛擬機在運行時解釋指令。使用Java的理論是,由於Java虛擬機,您可以在許多不同的機器上使用相同的代碼。在實踐中,這並不總是奏效,有時會導致代碼運行緩慢。然而,Java在機器人的某些部分非常受歡迎,因此你可能需要它。

2.python

Python近年來尤其在機器人技術方面出現了巨大的復甦。其中一個原因可能是Python(和C ++)是ROS中發現的兩種主要的編程語言。像Java一樣,它是一種解釋語言。與Java不同,語言的主要重點是易用性。許多人都認為這樣做非常好。

Python節省了許多常規的事情,這些事情在編程中花費時間,例如定義和轉換變數類型。此外,還有大量免費的圖書館,這意味著當您需要實現一些基本功能時,您不必「重新發明」。並且由於它允許使用C / C ++代碼進行簡單的綁定,這意味著代碼的性能很重的部分可以用這些語言來實現,以避免性能下降。

1.C / C ++

最後,我們達到機器人技術的第一編程語言!許多人都同意C和C ++是新機器人的好起點。為什麼?因為很多硬體庫都使用這些語言。它們允許與低級硬體進行交互,允許實時性能和非常成熟的編程語言。這些天,您可能會使用C ++多於C,因為該語言具有更多的功能。C ++基本上是C的擴展。首先學習至少一點C可能是有用的,以便您可以在找到以C編寫的硬體庫時識別它。C / C ++並不像以前那樣簡單,比如Python或者MATLAB。使用C實現相同的功能可能需要相當長的時間,並且需要更多的代碼行。然而,由於機器人非常依賴於實時性能,

機器人的主要特點之一是其通用性,是機器人具有可編程能力是實現這一特點的重要手段。機器人編程必然涉及機器人語言。機器人語言是使用符號來描述機器人動作的方法,它通過對機器人的描述,使機器人按照編程者的意圖進行各種操作。

機器人語言的產生和發展是與機器人技術的發展以及計算機編程語言的發展緊密相關的。編程系統的核心問題是操作運動控制問題。

機器人編程系統以及方法

機器人編程是機器人運動和控制問題的結合點,也是機器人系統最關鍵的問題之一。當前實用的工業機器人常為離線編程或示教,在調試階段可以通過示教控制盒對編譯好的程序一步一步地進行,調試成功後可投入正式運行。

機器人語言操作系統包括3個基本的操作狀態:

  • 監控狀態

  • 編程狀態

  • 執行狀態

  • 監控狀態:用來進行整個系統的監督控制。

    編輯狀態:提供操作者編製程序或編輯程序

    執行狀態:用來執行機器人程序

    把機器人源程序轉換成機器碼,以便機器人控制櫃能直接讀取和執行,編譯後的程序運行速度將大大加快。

    根據機器人不同的工作要求,需要不同的編程。編程能力和編程方式有很大的關系,編程方式決定著機器人的適應性和作業能力。隨著計算機在工業上的廣泛應用,工業機器人的計算機編程變得日益重要。

    編程語言也是多種多樣的,目前工業機器人的編程方式有以下幾種:

  • 順序控制的編程

    在順序控制的機器中,所有的控制都是由機械或者電氣的順序控制來實現,一般沒有程序設計的要求。順序控制的靈活性小,這是因為所有的工作過程都已編輯好,由機械擋塊,或其他確定的辦法所控制。大量的自動機都是在順序控制下操作的,這種方法的主要優點是成本低、易於控制和操作。

  • 示教方式編程

    目前,大多數工業機器人都具有採用示教方式來編程的功能。示教方式編程一般可分為手把手示教編程和示教盒示教編程兩種方式:

  • 手把手示教編程:主要用於噴漆、弧焊等要求實現連續軌跡控制的工業機器人示教編程中。具體的方法是利用示教手柄引導末端執行器經過所要求的位置,同時由感測器檢測出工業機器人個關節處的坐標值,並由控制系統記錄、存儲下這些數據信息。實際工作中,工業機器人的控制系統會重復再現示教過的軌跡和操作技能。

    手把手示教編程也能實現點位控制,與CP控制不同的是它只記錄個軌跡程序移動的兩端點位置,軌跡的運動速度則按各軌跡程序段應對的功能數據輸入。

  • 示教盒示教編程方式是人工利用示教盒上所具有的各種功能的按鈕來驅動工業機器人的各關節軸,按作業所需要的順序單軸運動或多關節協調運動,完成位置和功能的示教編程。示教盒示教一般用於大型機器人或危險條件作業下的機器人示教。

  • 離線編程或預編程

  • 離線編程和預編程的含義相同,它是指用機器人程序語言預先用示教的方法編程,離線編程的優點:

  • 編程可以不使用機器人,可以騰出機器人去做其他工作

  • 可預先優化操作方案和運行周期

  • 以前完成的過程或子程序可結合到代編的程序中去

  • 可以用感測器探測外部信息,從而使機器人做出相應的響應。這種響應使機器人可以在自適應的方式下工作

  • 控制功能中,可以包含現有的計算機輔助設計(CAD)和計算機輔助製造(CAM)的信息

  • 可以用預先運行程序來模擬實際運動,從而不會出現危險,以在屏幕上模擬機器人運動來輔助編程

  • 對不同的工作目的,只需替換一部分待定的程序

  • 在非自適應系統中,沒有外界環境的反饋,僅有的輸入是關節感測器的測量值,從而可以使用簡單的程序設計手段。

  • 對機器人的編程要求

  • 能夠建立世界模型

  • 能夠描述機器人的作業

  • 能夠描述機器人的運動

  • 允許用戶規定執行流程

  • 有良好的編輯環境

  • 機器人編輯語言的類型

  • 動作級

    (AL語言系統、LUNA語言及其特徵)

  • 對象級

    (AUTOPASS語言及其特徵、RAPT語言及其特徵)

  • 任務級

② java怎樣爬取jsp文件

不可能,只能抓取被瀏覽器編譯後的html頁面!

③ 如何用Python抓取動態頁面信息

很早之前,學習Python web編程的時候,就涉及一個Python的urllib。可以用urllib.urlopen("url").read()可以輕松讀取頁面上面的靜態信息。但是,隨著時代的發展,也來越多的網頁中更多的使用javascript、jQuery、PHP等語言動態生成頁面信息。因此,用urllib再去抓取頁面HTML就不足以達到我們想要的效果。
回到頂部
解決思路:

有一個思路最為簡單的思路可以動態解析頁面信息。urllib不可以解析動態信息,但是瀏覽器可以。在瀏覽器上展現處理的信息其實是處理好的HTML文檔。這為我們抓取動態頁面信息提供了很好的思路。在Python中有一個很有名的圖形庫——PyQt。PyQt雖然是圖形庫,但是他裡面 QtWebkit。這個很實用。谷歌的Chrome和蘋果的Safari都是基於WebKit內核開發的,所以我們可以通過PyQt中得QtWebKit 把頁面中的信息讀取載入到HTML文檔中,再解析HTML文檔,從HTML文檔中提取我們想用得信息。
回到頂部
所需材料:
作者本人實用Mac OS X。應該在Windows和linux平台也可以採用相同的辦法。
1、Qt4 library
Library,而不是Creator。Library在Mac的默認安裝路徑下,應該是/home/username/Developor/,不要改變Qt4的默認安裝路徑。否則可能安裝失敗。
官方網址:http://qt-project.org/downloads

2、SIP、PyQt4
這兩個軟體可以在在PyQt的官網找到。下載的是它的源碼。Mac和Linux需要自己編譯。
下載地址是:http://www.riverbankcomputing.co.uk/software/pyqt/download
在終端切換到文件解壓後的目錄中。
在終端中輸入
python configure.py
make
sudo make install
進行安裝編譯。
SIP和PyQt4兩個安裝方法相同。但是PyQt4依賴SIP。所以先安裝SIP再安裝PyQt4

1、2兩步完成之後,Python的PyQt4的模塊就安裝好了。在Python shell中輸入import PyQt4看看能不能找到PyQt4的模塊。

3、Spynner
spynner是一個QtWebKit的客戶端,它可以模擬瀏覽器,完成載入頁面、引發事件、填寫表單等操作。
這個模塊可以在Python的官網找到。
下載地址: https://pypi.python.org/pypi/spynner/2.5
解壓後,cd到安裝目錄,然後輸入sudo python configure.py install安裝該模塊。
這樣Spynner模塊就安裝完成了,在python shell中試試import spynner看看該模塊有沒有安裝完成。

回到頂部
Spynner的簡單使用
Spynner的功能十分強大,但是由於本人能力有限,就介紹一下如何顯示網頁的源碼吧。
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

#! /usr/bin/python
#-*-coding: utf-8 -*-

import spynner

browser = spynner.Browser()
#創建一個瀏覽器對象

browser.hide()
#打開瀏覽器,並隱藏。

browser.load("http://www..com")
#browser 類中有一個類方法load,可以用webkit載入你想載入的頁面信息。
#load(是你想要載入的網址的字元串形式)

print browser.html.encode("utf-8")
#browser 類中有一個成員是html,是頁面進過處理後的源碼的字元串.
#將其轉碼為UTF-8編碼

open("Test.html", 'w+').write(browser.html.encode("utf-8"))
#你也可以將它寫到文件中,用瀏覽器打開。

browser.close()
#關閉該瀏覽器


通過這個程序,就可以比較容易的顯示webkit處理的頁面HTML源碼了。

④ libpcap怎麼在android編譯

運行主界面,點擊菜單

菜單界面,點擊開始抓包,然後切換出去,用瀏覽器上網,再切換回來

上圖是抓到的包,顯示在界面上

主要思路
1 使用庫libpcap,寫個簡單的c程序main.c,實現抓包,在控制台輸出所抓取包的內容,可以先在linux用gcc編譯,以root許可權運行一次,確保程序正確

2 用ndk編譯main.c,得到可執行文件pcap(名字自己取的),放到/system/bin下,修改許可權,用手機連接電腦,用adb shell以root許可權 試一下,確保程序正確

3 在Android程序中以root許可權執行pcap,並獲得輸出的數據
4 將輸出的數據解析成Packet(jpcap中的一個類)類的對象
5 然後在Java中,你就可以做你想做的了

⑤ 如何抓取Silverlight中的數據

1、在瀏覽器中,打開Silverlight頁面,點擊右鍵,查看頁面源代碼;
2. 在html源代碼中搜索"xap",很快就能定位出xap的位置。例如:<param name="Source" value="test/getdata.xap" />
該value就是xap在伺服器端的位置。
3.把它和網址域名地址拼接起來,來獲取當前的xap文件。在地址欄輸入: .moumou.com/test/getdata.xap,
這時瀏覽器會提示你下載該xap文件
4.重新命名下載下來的文件getdata.xap,為 getdata.zip. 然後解壓該壓縮包到同一個目錄. 在目錄中,會看到該Silverlight使用的文件.

5.使用大Reflector來查看反編譯DLL中文件即可

⑥ 如何手工抓取mp文件

在生產環境下進行故障診斷時,為了不終止正在運行的服務或應用程序,有兩種方式可以對正在運行的服務或應用程序的進程進行分析和調試。
首先一種比較直觀簡潔的方式就是用WinDbg等調試器直接attach到需要調試的進程,調試完畢之後再detach即可。但是這種方式有個缺點就是執行debugger命令時必須先break這個進程,執行完debug命令之後又得趕緊F5讓他繼續運行,因為被你break住的時候意味著整個進程也已經被你掛起。另外也經常會由於First Chance Excetpion而自動break,你得時刻留意避免長時間break整個進程。所以這樣的調試方式對時間是個很大的考驗,往往沒有充裕的時間來做仔細分析。
另一種方式則是在出現問題的時候,比如CPU持續長時間100%,內存突然暴漲等非正常情況下,通過對服務進程snapshot抓取一個mp文件,完成mp之後先deatch,讓進程繼續運行。然後用windbg等工具來分析這個抓取到的mp文件。
那麼如何在不終止進程的情況下抓取mp文件呢?Debugging Tools for Windows里提供了一個非常好的工具,adplus.vbs。從名字可以看出,實際上是一個vb腳本,只是對cdb調試器作的一個包裝腳本。
其路徑與Debugging Tools for Windows的安裝路徑相同,使用的方法也很簡單,如下所示:
adplus.vbs -hang -p 1234 -o d:/mp
其中-hang指明使用hang模式,亦即在進程運行過程中附加上去snapshot抓取一個mp文件,完成之後detach。與之對應的是-crash崩潰模式,用戶先啟動adplus,然後由它啟動要監控的程序,在出現異常崩潰時自動生成mp文件,或者通過Ctrl-C人為發出抓取指令。但是-crash模式在抓取完成之後,被監控的進程就必須終止。因此我們在這里只選用-hang模式。
-p是要調試的進程ID,比如ASP.NET應用線程池,在Win2003下就是w3wp.exe
-o 指定要output的mp文件路徑。
另外,與adplus類似的,有個UserDump工具,但是抓取用戶模式的進程,而adplus則是內核模式和用戶模式兩者皆可。
而總所周至的Dr. Waston,則會在進程崩潰之後的自動時候抓取mp文件,一樣可以用於windbg等調試器來事後分析程序崩潰時的狀態。
====================
0:000> !mpheap -stat
No export mpheap found
======解決方法:
.load clr20/sos.dll,你要先執行的。sos.dll在默認的c:/windows/microsoft.net/framework/v2.....下面,你復制到c:/program files/debugging tools for windows下面的clr20目錄下面(clr20是你手工創建的)
=======================

在.NET下開發時,最基本的調試方法就是使用Visual Studio的單步調試。但是對於一些特殊情況,特別是涉及到CLR內部的時候使用這種方式就達不到目的了。
如果要查看運行時內存使用情況,IL代碼,CLR信息等可以使用以下兩種方式:
1、使用VS2005 + sos.dll
2、使用Windbg + sos.dll
第二種方式功能更加強大,下面我就通過實際操作展示一下怎麼使用這種方法得到運行時ArrayList內部的值。
有人可能會說:我直接用Visual Studio的單步調試豈不是更快?當然,這個只是一個演示,通過這個演示是為以後的高級調試打下基礎

在操作之前,先熟悉一下基本知識:
A、使用VS2005 + sos.dll調試
1、需要在項目->屬性->調試-〉啟用非託管代碼調試
2、打開調試-〉窗口-〉即時
3、在即時窗口中輸入 !load sos 載入調試模塊
4、輸入其它調試語句

B、使用Windbg + sos.dll
1、去微軟的網站下載最新的Windbg
2、打開Windbg在File-〉Symbol File Path ...窗口中輸入 srv*c:/symbols*http://msdl.microsoft.com/download/symbols
3、運行需要調試的程序,然後在Windbg中File-〉Attach to Process中選擇剛才運行的程序
4、在出現的Command窗口中就可以輸入調試語句
5、常用調試語句:
lm //查看載入了哪些模塊
.load C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/sos.dll //載入調試模塊
ld TestClass //載入調試符號
!name2ee TestClass.exe TestClass.Program.test //顯示test方法相關的地址
!mpmt -md 00976d48 //得到類的成員函數詳細信息
!mpil 00973028 // 顯示這個方法被編譯器編譯之後的IL代碼
!mpheap -stat //該命令顯示程序中所有對象的統計信息,顯示的大小是對象本身的大小,不包括對象裡面值的大小
!mpheap -mt 790fcb30 //該命令顯示MethodTable 790fcb30的詳細信息
!gcroot 012919b8 //來顯示一個實例的所屬關系
!mpobj(do) 012a3904 //顯示一個對象的具體內容,看對象裡面有什麼,值是什麼
!ObjSize 012a1ba4 //對象實際在內存中的大小
!eeheap -gc //查看託管堆的情況(包括大小)
!DumpArray //查看數組信息
下面就來看看具體的調試步驟:
1、我們的測試代碼

namespace TestClass
{
class Program
{
[STAThread]
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add("aaaa");
list.Add("bbbb");
Console.ReadLine();
}
}
}很簡單,就是一個ArrayList

運行這個程序(開始執行,不調試),然後進入Windbg,Attach到這個進程

2、查看所有堆棧信息
0:004> !mpheap -stat
MT Count TotalSize Class Name
7910062c 1 12 System.Security.Permissions.SecurityPermission
7918e284 1 16 System.IO.TextReader+SyncTextReader
79102d10 1 20 Microsoft.Win32.SafeHandles.SafeFileMappingHandle
79102cb4 1 20 Microsoft.Win32.SafeHandles.SafeViewOfFileHandle
79101d30 1 20 System.Text.
79100a7c 1 20 Microsoft.Win32.SafeHandles.SafeFileHandle
79105cd4 1 24 System.Collections.ArrayList
......
7912ad90 11 9036 System.Object[]
790fcb30 2083 131492 System.String
Total 2202 objects
除了我們的ArrayList外,還有很多其它的系統信息,先不用管它

3、查看我們的ArrayList的信息
0:004> !mpheap -mt 79105cd4
Address MT Size
012a1b88 79105cd4 24
total 1 objects
Statistics:
MT Count TotalSize Class Name
79105cd4 1 24 System.Collections.ArrayList
Total 1 objects

4、查看對應地址內部實際的值
0:004> !do 012a1b88
Name: System.Collections.ArrayList
MethodTable: 79105cd4
EEClass: 79105c28
Size: 24(0x18) bytes
(C:/WINDOWS/assembly/GAC_32/mscorlib/2.0.0.0__b77a5c561934e089/mscorlib.dll)
Fields:
MT Field Offset Type VT Attr Value Name
7912ad90 40008df 4 System.Object[] 0 instance 012a1bb0 _items
791018e0 40008e0 c System.Int32 1 instance 2 _size
791018e0 40008e1 10 System.Int32 1 instance 2 _version
790fc35c 40008e2 8 System.Object 0 instance 00000000 _syncRoot
7912ad90 40008e3 1c0 System.Object[] 0 shared static emptyArray
>> Domain:Value 00149c58:012a1ba0 <<
可以看到ArrayList的大小為2,具體的值保存在地址012a1bb0中,是一個System.Object[]類型的數組

5、查看數組信息
0:004> !DumpArray 012a1bb0
Name: System.Object[]
MethodTable: 7912ad90
EEClass: 7912b304
Size: 32(0x20) bytes
Array: Rank 1, Number of elements 4, Type CLASS
Element Methodtable: 790fc35c
[0] 012a1b50
[1] 012a1b6c
[2] null
[3] null

6、查看數組內對象的值
0:004> !do 012a1b50
Name: System.String
MethodTable: 790fcb30
EEClass: 790fca90
Size: 26(0x1a) bytes
(C:/WINDOWS/assembly/GAC_32/mscorlib/2.0.0.0__b77a5c561934e089/mscorlib.dll)
String: aaaa
Fields:
MT Field Offset Type VT Attr Value Name
791018e0 4000096 4 System.Int32 1 instance 5 m_arrayLength
791018e0 4000097 8 System.Int32 1 instance 4 m_stringLength
790fe534 4000098 c System.Char 1 instance 61 m_firstChar
790fcb30 4000099 10 System.String 0 shared static Empty
>> Domain:Value 00149c58:790d81bc <<
7912b1d8 400009a 14 System.Char[] 0 shared static WhitespaceChars
>> Domain:Value 00149c58:012a16f0 <<
====================
windbg使用小總結
【抓mp】
1、一般抓法
adplus -hang -p 3230 -quiet 抓3230 pid進程,hang模式,相當於把那個進程暫停住,取內存快照
adplus -crash -pn w3wp -quiet 抓w3wp進程,crash模式,當那個進程崩潰結束的時候自動抓取當時的內存
adplus -hang -iis -quiet 抓IIS相關進程,包括其上host的web應用,以及iis自身
2、抓window服務
http://support.microsoft.com/kb/824344/zh-cn
3、遠程抓
http://blog.joycode.com/tingwang/archive/2006/08/11/79763.aspx
4、抓藍屏和死機的mp
電腦無故重啟或者藍屏會在C:/WINDOWS/Minimp/下保存一個minimp,但是這個minimp可用的命令很少,一般只打!analyze –v看到是哪個進程引起的,還有相關的驅動模塊就基本定位問題了。
5、IIS回收的時候抓
http://blog.yesky.com/blog/omakey/archive/2006/12/17/1618015.html
6、計劃任務抓
比如一個進程起來後不知道它什麼時候會意外崩潰,可以在計劃任務里用crash里抓,當那個進程意外終止的時候,cdb可以直接附加上去,抓取當時的mp,如果要抓一些會自動重啟的進程,而且要抓每次重啟前的mp,可以參考附錄里一節。
【常用命令】
1、先path C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727,把.net路徑設置為path環境變數,一遍在windbg里可以直接.load sos,而不必.load C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/sos.dll
2、ld demo,載入你程序的pdb文件,調試.net程序一般要把kernel32和mscorwks的符號載入上,關於這兩個東西大家可以查資料,尤其是後者有哪些函數可以多了解一些。
3、在windbg的file/symbol file path對話框里輸入以下文字,以便自動載入和下載符號
C:/WINDOWS/Symbols;d:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/symbols;.sympath SRV*d:/localsymbols*http://msdl.microsoft.com/download/symbols
其中有windows、.net2.0和自動從網上下載的調試符號,注意根據自己的情況適當修改目錄
【調試死鎖】
1、!syncblk,查看哪些線程拿到了鎖
2、~67e!clrstack 跳到某個拿到鎖的線程看它正在干什麼操作,遲遲不肯釋放鎖
3、!runaway 查看這個佔有鎖的線程運行了多長時間。
4、~*e!clrstack查看所有線程的託管堆棧,看看哪些是正在等待鎖的,比如hang在System.Threading.Monitor.Enter(System.Object)
5、~136s選擇該線程,顯示如下
0:000> ~136s eax=00005763 ebx=08deeb5c ecx=03eff0d4 edx=5570ab69 esi=08deeb5c edi=7ffd6000 eip=7c95ed54 esp=08deeb10 ebp=08deebb8 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 ntdll!KiFastSystemCallRet: 7c95ed54 c3 ret
找到ecx寄存器的值,復制後ctrl+f,向上查找,會找到!syncblk的地方,如下
0:000> !syncblk Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 1906 03ee4be4 5 1 03ee8f88 22c8 67 185e2ef0 System.Object 5390 052ca39c 3 1 05292b30 1dd4 49 1060d3ac System.Object 9372 0530702c 15 1 0012d3a8 1aa8 80 185e7704 System.Object 11428 03eff0d4 35 1 053b8fa8 169c 120 166acd98 System.Object 15278 0531c6b4 61 1 06bc1430 26d8 86 1a5bea88 System.Object
可以看到136線程等待的鎖被120號線程占著不放(格式有點亂,湊合看),
6、有時候通過ecx寄存器找鎖不是很確定,可以用~* kb來把所有線程堆棧打出來,然後根據!syncblk出來的同步快的值去搜索大概有多少個線程在等那個鎖。因為同樣是等待鎖,可等的狀態不一樣,有的在Q里,有的鎖已經升級,有的去嘗試去拿鎖了,所以不一定當時ecx寄存器指向那塊內存,具體如何找到某個正在等待鎖的線程等待的鎖的內存地址,以及它正等待的這個鎖被哪個線程拿著,我還沒琢磨出規律來,但一般情況下,如果有其它同步對象的話,更難查。.net里用我上面說的幾步就能查出鎖的問題了。

【內存泄漏】
1、!mpheap -stat看看哪些對象個數最多,占內存最大,
2、找到某個格式比較多的對象,可以看它的方法表,然後用!mpheap -mt 66398fa4去隨機找幾個對象的地址
3、用!do 1e5a22bc命令去查看幾個對象的狀態,屬性的值等,看看正常不正常
4、用!gcroot -nostacks 1e5a22bc去查看幾個對象的根正常不正常,如果有些對象的根不是自己預先設計的那樣,很可能被自己沒想到的對象強引用了,所以GC無法回收它,就泄漏了。
【CPU百分百】
主要用幾個計數器和!runaway命令,具體見以下鏈接
http://www.cnblogs.com/onlytianc ... 7/06/03/769307.html
【線程池耗盡】
!threadpool 能看到完成埠,線程池工作線程和timer回調各占線程池的情況。
【其它】
1、!eestack -short -ee查看所有重要(獲取鎖的,託管的,停止並允許回收的)線程的mpstack,差不多相當於~*e!mpstack
2、.time 可以看到進程跑了多少時間
3、!dso 查看當前線程里有哪些對象,分析內存泄漏問題也許會用到

⑦ 如何用python 爬蟲抓取金融數據

獲取數據是數據分析中必不可少的一部分,而網路爬蟲是是獲取數據的一個重要渠道之一。鑒於此,我拾起了Python這把利器,開啟了網路爬蟲之路。

本篇使用的版本為python3.5,意在抓取證券之星上當天所有A股數據。程序主要分為三個部分:網頁源碼的獲取、所需內容的提取、所得結果的整理。

一、網頁源碼的獲取

很多人喜歡用python爬蟲的原因之一就是它容易上手。只需以下幾行代碼既可抓取大部分網頁的源碼。

為了減少干擾,我先用正則表達式從整個頁面源碼中匹配出以上的主體部分,然後從主體部分中匹配出每隻股票的信息。代碼如下。

pattern=re.compile('<tbody[sS]*</tbody>')
body=re.findall(pattern,str(content)) #匹配<tbody和</tbody>之間的所有代碼pattern=re.compile('>(.*?)<')
stock_page=re.findall(pattern,body[0]) #匹配>和<之間的所有信息

其中compile方法為編譯匹配模式,findall方法用此匹配模式去匹配出所需信息,並以列表的方式返回。正則表達式的語法還挺多的,下面我只羅列所用到符號的含義。

語法 說明

. 匹配任意除換行符「 」外的字元

* 匹配前一個字元0次或無限次

? 匹配前一個字元0次或一次

s 空白字元:[<空格> fv]

S 非空白字元:[^s]

[...] 字元集,對應的位置可以是字元集中任意字元

(...) 被括起來的表達式將作為分組,裡面一般為我們所需提取的內容

正則表達式的語法挺多的,也許有大牛隻要一句正則表達式就可提取我想提取的內容。在提取股票主體部分代碼時發現有人用xpath表達式提取顯得更簡潔一些,看來頁面解析也有很長的一段路要走。

三、所得結果的整理

通過非貪婪模式(.*?)匹配>和<之間的所有數據,會匹配出一些空白字元出來,所以我們採用如下代碼把空白字元移除。

stock_last=stock_total[:] #stock_total:匹配出的股票數據for data in stock_total: #stock_last:整理後的股票數據
if data=='':
stock_last.remove('')

最後,我們可以列印幾列數據看下效果,代碼如下

print('代碼',' ','簡稱',' ',' ','最新價',' ','漲跌幅',' ','漲跌額',' ','5分鍾漲幅')for i in range(0,len(stock_last),13): #網頁總共有13列數據
print(stock_last[i],' ',stock_last[i+1],' ',' ',stock_last[i+2],' ',' ',stock_last[i+3],' ',' ',stock_last[i+4],' ',' ',stock_last[i+5])

熱點內容
中信銀行信用卡激活後密碼是多少 發布:2024-10-25 17:28:31 瀏覽:505
cocos2d30編譯 發布:2024-10-25 17:20:51 瀏覽:993
app直播平台源碼 發布:2024-10-25 17:19:57 瀏覽:223
asp文件上傳帶進度條 發布:2024-10-25 17:19:54 瀏覽:656
mp4反編譯軟體 發布:2024-10-25 16:47:33 瀏覽:998
哪個是提升電腦幀數的配置 發布:2024-10-25 16:43:45 瀏覽:95
以一種訪問許可權不允許的方式 發布:2024-10-25 16:38:32 瀏覽:404
嵌入式linux開發環境搭建 發布:2024-10-25 16:26:51 瀏覽:325
奧迪a4l乞丐版什麼配置 發布:2024-10-25 16:20:33 瀏覽:411
python讀取txt文件數據 發布:2024-10-25 16:07:36 瀏覽:23