為什麼每次調試結果不一樣
① 程序調試的結果和輸出的結果不一樣
#define來定義宏的時候要注意最好把宏中的參數分別用括弧括起來,如#define gpj n/(n+1) 應寫成#define gpj ((n)/(n+1)),否則有可能導致錯誤。樓主的就是這樣導致的。
因為用#define定義宏僅僅只是一個替換,如程序中if(j>100*ps) ,如果按樓主定義的話編譯時會替換為if(j<(100*n/(n+1)))這句實際上跟樓主的意思有差別。樓主希望先算n/(n+1)的值,再與100相乘,但實際上是先100與n相乘,再除以(n+1),因為兩個int型做除法時結果會取整,因此這兩種演算法的結果可能不一樣。其他宏定義也類似。
將宏定義寫成#define gpj ((n)/(n+1))這種形式後,在調試就可以看到,調試結果和輸出結果是一樣的了。
② int a = (int)(Math.random()*100);為什麼每次調試的結果不一樣
random 就是一個隨機函數,隨機函數當然會每次都不一樣了。
③ 在C#中Debug和Release兩種調試方法出來結果不同,求問為什麼
debug編譯與release編譯的區別就在於debug只認添加進工程目錄的代碼。release會自動找匹配的代碼 所以調試的時候用debug發布的時候用release。調試用debug可以讓你手動將文件添加進項目中 發布用release可以讓你將dll文件與exe文件分不同目錄放置
④ java斷點調試和運行結果不一樣
可能是非同步任務,運行的話還未獲得非同步任務的結果就返回了,你打了斷點,就可能獲得到了返回值。純屬猜測,僅供參考
⑤ c#直接運行跟調試的結果不一樣
隨機數就應該不一樣。
每次執行都可能不一樣的,甚至是一定不一樣,不然還叫什麼隨機數
⑥ VC 為什麼調試的結果與Debug下生成的.EXE運行的不相同
調進去你會發現你的OpenProcess失敗了,只有一部分進程可以成功,但是debug就可以成功打開絕大多數進程,因此可以判定是許可權問題,沒錯進程也是有許可權的,做遠程注入鉤子的時候也會遇到許可權不夠的問題,以此類推這里openprocess可能也需要提升許可權
BOOL ImprovePriv()
{
HANDLE hToken;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
return FALSE;
}
TOKEN_PRIVILEGES tkp;
tkp.PrivilegeCount = 1;
//查看指定許可權對應的LUID
if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid))
{
return FALSE;
}
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//調整令牌許可權
if(!AdjustTokenPrivileges(hToken,FALSE,&tkp,0,NULL,NULL))
{
return FALSE;
}
CloseHandle(hToken);
return TRUE;
}
把代碼復制到你的GetProcess前面,並且在GetProcess中第一句話處加ImprovePriv();
編譯後再去debug下的exe直接運行看看,是不是跟調試時候一樣了
⑦ C語言中為什麼我的調試和運行不一樣結果
你上面的這段代碼是將他們進行交換,所以之後的值才會倒轉
剛開始 a
=
3
= 0011 b
= 4
= 0100
a
=
a^b
=
0011^ 0011
=
0111
b
=
b^a
=
0100^0111
=
0011 =
3
a
=
a^b
=
0111^0011
=
0100
=
4
⑧ C語言中為什麼我的調試和運行不一樣結果
while(xx[b]!=0)
b++;
你這個b沒有賦初值,調試器和實際很可能是不一樣的。調試器里很可能給它一個初始值0,而實際則不會。既然你下面用到了strlen函數,這里也直接用b=strlen(xx)就好了。
另外,最開始的getchar()是干什麼用的?這個在調試器和實際的效果也是不一樣的。因為調試器執行到這句的時候,你會給它一個回車跳過去了。但實際,你可能直接輸入一個串,這樣會吞掉第一個字元。
最後,程序要執行一個free的操作,雖然在這里程序結束了會自動free,也沒啥影響,但對任何一塊malloc的內存,在用完後執行free操作,是一個好習慣。
⑨ 為什麼java運行和調試結果不一樣
運行後,執行程序直接得到結果,成功或者失敗;
⑩ dsp調試和非調試的狀態不一樣
加裝DSP和沒裝的較大區別取決於加裝DSP後功放能夠立即用電腦開展調整,針對音質的調試會出現較大協助,次之加裝DSP後功放的作用會變的大量,不論是音源輸入的方法或是以後的可控制水平全是沒安裝以前沒法對比的。
會出現單步調試的結果和直接快速運行的程序結果輸出不一樣的情況,當單步調試的時候可以按照希望的邏輯走到應該報錯的地方,但是當程序直接運行,沒有下斷點的時候,就會走顯示網路沒有問題的邏輯。經過一段時間的分析探討,我發現問題的原因在於,我們的網路是非同步的,當連接命令交給底層的網路模塊後,網路內部的邏輯會去執行它自己的邏輯,我不能等待它的返回結果。當我傳入的ip地址是正確的時候,很快速地就可以得到網路的狀態為可以讀入、寫入,並成功連接,但當我的ip地址是錯誤的話,底層的網路模塊就會自動開啟一系列的重連機制,導致消耗大量的無意義時間,在這個過程中,我的邏輯並沒有進行特殊的處理,因此按照之前的邏輯返回了成功,只有當等待相當長的一段時間後,才能夠成功取得連接錯誤的結果,返回失敗。因此,在直接運行程序的時候,由於程序運行速度很快,這段時間太短沒有辦法直接取到想要的結果,但是在單步調試的時候,調試程序花費了較多的時間,導致程序運行到對應位置的時候已經可以取到網路連接失敗的狀態。
所以,雖然網路部分有很多看似玄學的東西,但是實際上也基本都是可以找到問題的原因的,只在於我們的經驗和細心程度。還需要多努力啊。