matlab裡面無法單步除錯mex函式,故需轉到vs上面除錯,這裡採用vs2010。
參考網上很多人寫的方法但都很亂,雜,試了多次都沒有成功。今天終於解決了,現把方法記錄下來。
1、vc中編寫mex函式
新建乙個win32 dll 空專案。
2、新增原始檔test.cpp,編寫mex函式,mex函式編寫方法這裡不贅述了。
3、配置專案屬性。
開啟專案屬性配置頁,c++ -> 附加包含目錄 加入matlab安裝目錄下的 \extern\include 路徑。
聯結器 -> 附加庫目錄 加入matlab的 \extern\lib\win32
(win64
)\microsoft 路徑。
聯結器 -> 輸入 -> 附加依賴項 輸入libmx.lib libeng.lib libmat.lib libmex.lib 這四個lib檔案。
在linker-general-output file:改成
.\debug\(projectname).mexw32
(mexw64
)(64位系統相應改成64)
source files- add - new item新建模組定義檔案test.def
並為其新增內容
library ;"test"
exports mexfunction
在linker-input-module definition file新增:test.def
matlab是 64位的話,vs編譯器必須為64位,需要手工調整!
4、f7生成解決方案,如果以上都正確,便會在工程debug目錄下生成乙個(projectname).mexw32檔案。
5、在vs中單步除錯mex函式。
將matlab的current folder 設定成mexw32檔案所在的路徑,即debug目錄。(這步非常重要,要不無法除錯呼叫)
vs2010-tools-附加到執行緒 attach to process-選擇matlab。
在源**test.cpp裡設定斷點。
在matlab工程裡輸入**或者函式(即mexw32檔案的檔名,這裡為projectname),即會跳轉到vs的斷點處。
然後按f10便可單步執行。
6、每次修改mexfunction所在的.cpp檔案後,重新編譯生成解決方案前都需要先在matlab工程下clear一下,即
clear (projectname).mexw32
注意:這步非常重要,因為matlab在呼叫該mex函式後還一直占用,未釋放,必須要clear下,vs中才可重新編譯生成解決方案。
好的,按照以上方法就可以任意編寫可除錯的mex函式啦。
除錯成功後把(projectname).mexw32檔案copy到任意matlab工程裡,就可以像函式呼叫一樣任意使用啦。
來自為知筆記(wiz)
在VS2013中除錯mex檔案
1.有了包含mexfunction的cpp或c還不夠,還需要建立乙個工程,這裡是新建乙個dll vs 新建 win32專案 dll。2.由於是64位機,所以需要把project設定成x64 debug,檢視 屬性管理器 雙擊project 配置管理器 平台 選擇x64 3.由於mex functio...
Mex檔案在VS2010中除錯方法
matlab裡面無法單步除錯mex函式,故需轉到vs上面除錯,這裡採用vs2010。參考網上很多人寫的方法但都很亂,雜,試了多次都沒有成功。今天終於解決了,現把方法記錄下來。1 vc中編寫mex函式 新建乙個win32 dll 空專案。2 新增原始檔test.cpp,編寫mex函式,mex函式編寫方...
Mex檔案在VS2010中除錯方法
matlab裡面無法單步除錯mex函式,故需轉到vs上面除錯,這裡採用vs2010。參考網上很多人寫的方法但都很亂,雜,試了多次都沒有成功。今天終於解決了,現把方法記錄下來。1 vc中編寫mex函式 新建乙個win32 dll 空專案。2 新增原始檔test.cpp,編寫mex函式,mex函式編寫方...