1. 程式人生 > >動態庫的除錯和崩潰的處理方法

動態庫的除錯和崩潰的處理方法

VS2010動態庫的除錯和程式崩潰的處理方法

DLL 還有助於共享資料和資源。大型專案中不可避免的要將系統模組化,模組化有非常多的好處,然而卻給跳試帶來很多不便,尤其是一個動態庫巢狀呼叫另外一個動態庫的情況。本文主要將在VS2010中怎麼除錯動態庫,另外講一下VS2010開發的應用程式崩潰時,怎麼定位問題。

1.應用程式和DLL在同一個解決方案下


這種情況只要把DLL生成後,放到Demo的除錯目錄下面,在DLL中打斷點除錯即可。必須要保證Demo呼叫的程式是最新的DLL程式碼編譯的,啟動應用程式後可以看到斷點是實心紅點

2.應用程式和DLL不在同一個解決方案下

一種解決方法,把DLL編譯好後,copy到應用程式下面,包括PDB檔案,然後在DLL的工程中設定除錯啟動命令。把DLL工程設為啟動專案,打斷點即可除錯。

另一種解決方法,把DLL編譯好COPY到應用程式執行目錄下面,啟動應用程式,把VS2010工程附加到程序。當然這種情況待在附加程序完成後,才能進入斷點除錯。

3.程式崩潰

一種方法,程式崩潰一般通過COREDUMP檔案進行除錯,在windows下面這部分需要自己在程式中新增程式碼,網上有原始碼,新增到程式中即可。程式崩潰是點選COREDUMP檔案,執行VS2010即可快速定位。    另外一種方法,沒有COREDUMP時,先執行程式,然後在VS2010中,把工程附加到程序,注意工程中執行涉及的所有檔案必須是VS2010最新程式碼編譯的。這種情況下,VS2010工程中不需要打斷點,當程式執行出現崩潰時,自動跳轉VS2010的程式碼中。這種情況非常適合伺服器程式,尤其是崩潰發生的條件不清楚,無法再現的情況。尤其伺服器執行幾天後,崩潰,這種情況非常有用。


相關推薦

linux動態libinlcude 載入方法

       眾所周知,Linux動態庫的預設搜尋路徑是/lib和/usr/lib。動態庫被建立後,一般都複製到這兩個目錄中。當程式執行時需要某動態庫,並且該動態庫還未載入到記憶體中,則系統會自動到這兩個預設搜尋路徑中去查詢相應的動態庫檔案,然後載入該檔案到記憶體中,這

動態除錯崩潰處理方法

VS2010動態庫的除錯和程式崩潰的處理方法 DLL 還有助於共享資料和資源。大型專案中不可避免的要將系統模組化,模組化有非常多的好處,然而卻給跳試帶來很多不便,尤其是一個動態庫巢狀呼叫另外一個動態

VS2010動態除錯方法

1 將動態庫與呼叫動態庫的程式放在同一解決方案下 開啟呼叫動態庫的程式,之後在“解決方案資源管理器”中,選中“解決方案’XXX’”,之後在右鍵選單中選擇“新增->現有專案”,之後在“新增現有專案

Visual Studio中根據系統區分引用64位、32位DLL動態文件的配置方法

問題 eight 找到 下拉 float c# more 遇到 語法 原來使用Win7的32位系統,進行C#工程的開發,後來重裝系統,換成了win7的64位系統 調試原來的工程,由於在其中引用了“SQLite”的32位的dll,導致在64為位下程序無法運行(但是編譯可以通

C#調用非托管動態中的函數方法

left tom -c too normal evel idt col class C#如何調用一個非托管動態庫中的函數呢,比如用VC6寫的動態庫,總之C#調用動態庫的過程是比Java調用DLL動態庫方便快捷多了,下面舉例說明這個過程。 1、創建一個非托管動態庫 代碼

mac下安裝包已損壞、顯示未激活、打開崩潰處理方法

允許 erl under 終端 顯示 復制粘貼 ali tex 密碼 mac安裝app出現安裝包已損壞、顯示未激活、打開崩潰等的提示 步驟1:Spotlight搜索(快捷鍵:command+空格或右上角搜索的符號):搜索 “終端” 步驟2:直接復制粘貼 sudo spctl

Navicat連接oracle報錯的處理方法

instant cat top ech 解決方法 bubuko not 分享圖片 圖片 1、oracle客戶端版本:11.2.0 64X navicat premium客戶端:12.0. 64X 2、安裝後,打開連接,輸入連接信息,點擊保存,提示oracle l

Linux下動態(.so)靜態(.a) 的區別 Linux下動態(.so)靜態(.a) 的區別 動態(.so)連結靜態(.a)的情況總結

Linux下動態庫(.so)和靜態庫(.a) 的區別   靜態庫在程式編譯時會被連線到目的碼中,程式執行時將不再需要該靜態庫。編譯之後程式檔案大,但載入快,隔離性也好。 動態庫在程式編譯時並不會被連線到目的碼中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。多個

java中的時間計算格式處理方法

//一天秒數 public final static long MILLISECONDS_OF_DAY = 1000 * 60 * 60 * 24; public final static long MINUTES_OF_DAY = 1000 * 60 * 60 * 24; p

windows下動態dll靜態編譯使用問題

window下動態庫dll和靜態庫lib問題 windows下動態庫dll和靜態庫lib的聯絡和區別,以及示例匯出個動態庫 https://blog.csdn.net/lifei092/article/details/79630273 問題: 1,生成dll時,同時生成lib是做

Go 生成C動態.so靜態.a

Go 生成C動態庫.so和靜態庫.a 原始碼 package main import "C" import "fmt" //export hello func hello(){ fmt.Println("hello world") } //export add func

linux下封裝函式——動態.so靜態.a(程式碼實現及連結方式)

在linux環境下的連結庫分為靜態連結庫(.a庫)和動態連結庫(.so庫),其作用是把C程式編譯好做成一種可執行連結檔案,主程式檔案呼叫這些程式的函式介面是可以使用a庫或so庫,在主程式中只需要include含有庫中提供的函式介面宣告的標頭檔案即可。所以學會如何

MATLAB-VISSIM模擬過程的呼叫事件處理方法

%%建立VISSIM的COM介面 vissim =actxserver('VISSIM.vissim.430'); %% 載入交通網路 current_path = pwd; vissim.LoadNe

Glide 入門到精通之十一 ——異常:除錯錯誤處理

Glide 的 GeneralRequest 類提供了一個方法去設定 log 的級別。不幸的是,在生產過程中,使用這個類並不容易。然而,有一個非常簡單的方法去獲得 Glide 的除錯日誌。你所要做的就是通過 adb 的 shell 來啟用。開啟你的終端,使用

nginx+tomcat+redis叢集實現負載均衡session同步的步驟問題處理方法

最近在研究nginx+tomcat的負載均衡功能, 因為需要實現failover時使用者無感知的效果,所以我考慮使用tomcat的session同步方式來實現。網上能查到的東西我就直接貼連結了,我把搭建這套系統的過程,與遇到的坑的處理方式說明一下。 我使用的系

簡單的使用Swig將C++標準編寫的動態提供給C#使用方法

處於工作要求,需要把Qt和opencv編寫的動態庫提供給客戶的的csharp程式使用,因此花時間研究了這個方法,本人的方法比較簡單,就是提供一個C++標準的動態庫作為橋,可以在動態庫中再呼叫opencv和qt編寫的動態庫,降低了耦合度,也有利於我自己修改介面而不需要別人干預;

除錯編寫程式方法

當出現語法錯誤或者執行錯誤時 錯誤資訊會很多,但是通常有用部分是: 是哪類錯誤在哪兒出現是應該花一些時間仔細閱讀錯誤資訊,但是不要輕易的認為錯誤資訊的提示都是準確的,特別是錯誤資訊的位置,有時候並不是真正的繁盛錯誤的地方。 增量式開發(incremental) 增量式開發的

linux設定動態路徑環境變數

linux安裝原始碼編譯出來的庫後,如何讓系統預設識別到, 如編譯後安裝在/usr/local/aarch64-qt下 1、設定動態庫連結配置 如果不設定動態庫連線,系統就找不到需要的*.so,導致軟體執行失敗。 可以ldd一下,如: [email protected]:~$ ldd

關於動態 - LIBDLL的區別與使用

http://www.cppblog.com/amazon/archive/2009/09/04/95318.html 1. 共有兩種庫 一種是LIB包含了函式所在的DLL檔案和檔案中函式位置的資訊(入口),程式碼由執行時載入在程序空間中的DLL提供,稱為動態連結庫dy

外掛載入帶有動態so的apk處理

     外掛載入帶有動態庫的apk時,會報UnsatisfiedLinkError找不到動態庫的錯誤。 解決方法是在DexClassLoader中 dalvik.system.DexClassLoader.DexClassLoader(String dexPath, S