發表文章

幾招有用的debug 技巧

圖片
技巧 1 : Git 紀錄還原法    善用 git 然後小幅度完成功能後,即 Commit 。這對於 "原本還能 work 的功能,不知改了什麼,卻突然壞掉了!? " 這一類的 Bug ,可以很容易觀察出錯誤的地方,並做還原。 技巧 2 :  BreakPoint 斷點法  一般常見的debug 技巧,主要是在 可能發生錯誤的地方設定中斷點 ,然後觀察數值是否為預期的值?亦或是否發生錯誤,如果沒有,繼續往下設中斷點反覆驗證。 技巧 3 : 最小化成功法   有時候當我們在安裝掛件,或維護一套陌生的系統時,常常是 run 不起來的情況。因為我們不熟悉接手的系統或元件,所以 去蕪存青用最小化的方式 ,讓它能順利 work 是重要的。例如:接手一個 tinyMCE 掛件設置了很多參數,但其實要正常 work 僅需這一行即可  selector:'textarea' ,其他大多數都是次要的設定,但bug可能就潛藏在這些次要的設定裡,如版本更新,舊版不再支援某設定值,或是語系模組沒有引用到...等。 技巧 4 : 紀錄檔除錯法  做網站程式設計時,這個方式非常重要,尤其是營運一段時間的網站, 會不定時的卡頓,或出現空白 Loading 過重開不了網頁...等不可預期的錯誤 。這時你可以試著查看 Log 檔 很有可能被攻擊、爬蟲或行銷工具給佔用頻寬資源,如下圖所示,在不合理的時間(秒數),攻擊軟體不斷的訪問不存在的 php 執行程式,試圖 try error 的方式進行攻擊。   技巧 5 : Google 除錯法      這個應該不用多做介紹,舉凡遇到的問題,只要 複製/貼上 google 的搜尋引擎,八九不離十,都可以找到答案,如果可以的話,多多培養英文的閱讀能力。因為有能力解決你的問題大多是外國人(除非是初階問題),畢竟大神都是國外人居多,而且都使用英文。 技巧 6 : 瀏覽器  除錯法     如果你是做網頁開發尤其是前端,瀏覽器的除錯是必備的,按下 F12 的 Console 控制台可以看到 js 的錯誤訊息,Network 頁籤可以觀察個元素的載入是否成功,還有載入的時間和效能。 技巧 7 : 選用IDE工具   下圖是號稱地表上最強的

採用 CKSource.CKFinder.Connector.Sample 完成 ckfinder 一鍵安裝

圖片
(一) 安裝 CKSource.CKFinder.Connector.Sample 若要手動安裝,可參考    安裝 ckfinder 的未知錯誤  在新版 VS 2019 的 Nuget 已經找不到 "CKSource.CKFinder.Connector.Sample" 套件了,在 2016/3/17 是最後一次更新,如果要安裝的話,可以直接到 Nuget 網站搜尋。 CKSource.CKFinder.Connector.Sample 接著,可在 VS 內採用指令方式安裝 Install-Package CKSource.CKFinder.Connector.Sample -Version 3.3.0-rc5 安裝完成後,直接執行 ckfinder.html 即可看到成功頁面。 (二) 整合到專案中,做成獨立頁面 參考官網提供的整合文件  Embedding as a Widget  <div id="ckfinder1"></div> <script src="/ckfinder/ckfinder.js"></script> <script> CKFinder.widget( 'ckfinder1', { height: 600 } ); </script> 整合成功後的頁面如下 : (三) 整合到檔案上傳欄位,做成彈出視窗 參考官網提供的整合文件  Using CKFinder in a Popup Window <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>CKFinder 3</title> <script src="/ckfinder/ckfinder.js"></script> </head

安裝 ckfinder 的未知錯誤

圖片
基本上把 ckfinder 下載回來,解壓縮並部屬到 IIS 即可使用,但我安裝時卻發生不明錯誤,如下圖所示 : 通常解決問題的第一步,是想辦法找出明確的錯誤源才能清楚地解決錯誤。所以 第一步,我先按 F12 查看錯誤請求 是哪一隻程式 ( 看不出明確的錯誤)。 接下來,如果是 500 錯誤,主機的  Log 檔都會記錄下來,於是我查看了 IIS 的記錄檔 ,不過還是看不出什麼端倪。 最後索性在 ckfinder\App_Data\logs 下的 messages.log 找到如下的錯誤訊息 : Fatal | CKSource.CKFinder.Connector.Core.CommandHandler | 2019-08-09 07:02:35.7427 | An unknown error has occured during execution of Init command.| System.IO.IOException: 當檔案已存在時,無法建立該檔案。 既然 ckfinder的log檔 都說是 "當檔案已存在時,無法建立該檔案" ,雖然不知道詳細原因,但第一個直覺,就是更換目錄或專案檔名試看看,於是問題就解決了。 最後 ckfinderAllowedRole 值需設定為'*'允許使用者瀏覽權限。 <add key="ckfinderAllowedRole" value="*" /> 後記: 學習 .Net 這兩個月來,感覺很多問題都是被隱藏起來,然後莫名其妙的發生? 或許這就是被 MS 封裝得太深了,不像我以前寫 PHP ,幾乎所有的問題來源都可以精確的判斷。

sourceTree 返回任意歷史版本

圖片
用 sourceTree 返回任意歷史版本,含遠端主機同步返回。 Step1 :  在任意您想返回的節點,按下右鍵選擇 "Reset current branch to this commit",如下圖所示。 Step2 : 這時本機已返回歷史節點,但遠端主機尚未同步,所以需要強制 Push 本機的返回異動紀錄到遠端主機。由於這類的操作會破壞歷史紀錄,所以 sourceTree 預設將 force 參數關閉以免被誤用,這時到工具列將它打開,如下圖所示。 Step3 : 這時做 Push 就可以順利選擇 "Force Push" 強制異動遠端主機倉了。

檢視表單的post參數

圖片
如下圖所示,F9 設定中斷點後,在 debug 模式下,將滑鼠移到 model 注入變數即可顯示 post 參數值。

git 版本控制 ( sourceTree & bitbucket)

圖片
採用 SourceTree 和  Bitbucket 做 Git 版本控制。 Step1 : 使用Command Line 的方式,移到專案路徑下,並輸入指令 : git init Step2 : 開啟 SourceTree 並加入Step1專案。 Step3 : 按右鍵,選擇忽略的檔案(如: .vs/ , packages/ ,專案名稱/App_Data )。 Step4 : 進行 Commit 。 Step5 : 連結  Bitbucket 進行遠端版本控制。 注意 : 專案名稱/App_Data 主要存放資料庫檔,所以必須忽略,否則會出現如下的錯誤訊息 : Git failed with a fatal error. error: open("XXX/App_Data/MyProject.mdf"): Permission denied fatal: Unable to process path XXX/App_Data/MyProject.mdf

Code First的Enabling Migrations

如果採 Code First 的開發方式,中途若追加欄位或異動資料庫,則會拋出例外錯誤訊息 : ”The model backing the 'XXXContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).” 這時可以參考如下的部落格文章,建立並更新遷移檔,保持最新的資料結構版本。 Entity Framework - 使用Code First的Enabling Migrations ASP.NET Identity 搭配 Entity Framework 啟用 Code First Migration