printf s在debug模式下列印未初化變數

2022-09-04 13:42:15 字數 694 閱讀 2467

今天在除錯核心輸出的時候發現的

printf_s在列印已經初始化的變數的時候正常輸出,但是在列印未初始化的時候出現未料到的資料。

原碼是這樣的

char buf[15

]; dword bfread;

readfile(device, buf,

10, &bfread, null);

for (int i = 0; i < 10; i++)

輸出成了這樣

按理乙個char為乙個位元組,輸出不可能4個位元組,於是我用ol開啟

這是主入口函式

關鍵在於movsx這個指令,他擴充套件了乙個符號位位元組放到eax裡,然後列印出來。

這樣就明顯了,實際printf_s函式會在列印之前將資料符號擴充套件為32位再列印出來。

那麼我繼續,如果初始化了,那麼在何時初始的呢,改變原碼再開啟

在原碼定義處初始化,並非按照我原來的預想在主函式一開始初始化~~

DEBUG模式和RELEASE模式

簡單的 如下,1 2 3 4 if defined debug defined debug nslog 測試 nslog test coding endif 上面的 if endif巨集定義的意思就是如果定義了debug,那麼就使用nslog輸出 否則這段 直接忽略。有人會疑問這個debug和 de...

Debug模式除錯技巧

debug模式除錯技巧 斷點管理視窗 選單欄方式 run view breakpoints actions方式 雙擊shift調出actions視窗,輸入view breakpoints即可開啟 任意斷點處滑鼠右鍵 選擇more即可開啟管理視窗 快捷鍵 ctrl shift f8 操作面板 除錯按鈕...

Cell Mode模式 debug利器

cell mode的最大好處就是可以不通過函式而直接在乙個大的.m檔案中實現分段執行除錯的功能。程式塊名 表示一段程式的開始,matlab稱程式段為cell。注意,填上程式塊名時,兩個百分號後面的空格不可缺少 游標在乙個cell上時,這個cell的背景就會變成淺黃色。快速定位 程式塊名可有可無,但是...