網路調試源碼c
此前,提到為了實現修改IP(一網卡對應多個IP,不重啟電腦讓修改立即生效),我嘗試在VC6.0上調試採用WMI實現的修改IP的程序,編譯不過的情況屢屢出現,在網上搜索了很久就是沒有找到徹底的解決方法,最後只好放棄通過WMI來設置IP了!
那麼,另一個思路(修改注冊表中IP項,然後重啟網卡)是否能行呢?於是,繼續尋求重啟網卡的方法,沒想到居然找到了一些不錯的資料。現整理如下,供日後參考。
(1)《vc++ 修改IP地址DNS 附帶源碼》實例代碼,來自csdn下載頻道,我下載下來調試過了,貌似和我上面提及的思路一致:通過重啟網卡來讓設置的IP立即生效。
(2)《程序禁用啟用網路/網卡》是一個封裝好的函數,我復制到本地並適當修改之後,就調試通過了!正好是我想要的:)關於函數中的配置文件ConfigInfo.ini,其內容貌似如下所示:
[cpp] view plain
[NETCARD]
TYPE=PCI
NAME=NVIDIA nForce Networking Controller
(3)《實戰DeviceIoControl 之五:列舉已安裝的存儲設備》這篇文章詳細地介紹了如何訪問設備,有代碼有注釋(作者另外的幾篇《實戰DeviceIoControl 》也很不錯),是很好的入門教材!
(4)《Windows下不重啟機器程序修改IP的三種方法》一篇總結性的文章,對幾種實現方法做了簡介,讓我們有一個全局的認識。
Ⅱ 如何在windows下用VC++進行網路編程調試clinet.c和server.c
先給除服務端代碼:
#include <stdio.h>
#include <Winsock2.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
SOCKET sockSrv=socket(AF_INET, SOCK_DGRAM, 0);
SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(5050);
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char recvBuf[200];
char sendBuf[200];
char Buf[400];
SOCKADDR_IN addrCli;
int len = sizeof(SOCKADDR);
int a=1;
for(;;)
{
recvfrom(sockSrv,recvBuf,200,0,(SOCKADDR*)&addrCli,&len);
if('q'==recvBuf[0])
{
sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)&addrCli,len);
printf("chat over !");
break;
}
sprintf(Buf,"%s say : %s",inet_ntoa(addrCli.sin_addr),recvBuf);
printf("%s\n",Buf);
if(a==1)
printf("Say some words ('p' to quit) : \n");
gets(sendBuf);
sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrCli,len);
a++;
}
closesocket(sockSrv);
WSACleanup();
}
下面是客戶端代碼:
#include <stdio.h>
#include <Winsock2.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
SOCKET sockCli=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(5050);
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
char recvBuf[200];
char sendBuf[200];
char Buf[400];
int len=sizeof(SOCKADDR);
int a=1;
for(;;)
{
if(a==1)
printf("Say some words ('p' to quit) :\n");
gets(sendBuf);
sendto(sockCli,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
recvfrom(sockCli,recvBuf,strlen(recvBuf)+1,0,(SOCKADDR*)&addrSrv,&len);
if('q'==recvBuf[0])
{
sendto(sockCli,"q",strlen("q")+1,0,(SOCKADDR*)&addrSrv,len);
printf("chat over !");
break;
}
sprintf(Buf,"%s say : %s",inet_ntoa(addrSrv.sin_addr),recvBuf);
printf("%s\n",Buf);
a++;
}
}
以上程序使用的是UDP協議,如果想要TCP協議的,過兩天我也可以給你發上來。
Ⅲ 哪位有編寫過網路調試助手的源代碼
根據TCP/IP編程,用.net編寫比較容易,用戶界面可以參考現成的,例如格西烽火、網路調試助手等都不錯。
Ⅳ C語言 怎麼調試程序
一、在keil中調試c語言程序
1、打開我們的程序,點擊菜單欄右側的start/stopdebug..按鈕,進入調試模式,如下圖。
Ⅳ 怎樣調試GCC源碼
一、linux程序gcc編譯步驟:
Gcc編譯過程主要的4個階段:
l 預處理階段,完成宏定義和include文件展開等工作;(.i)
l 根據編譯參數進行不同程度的優化,編譯成匯編代碼(.s.S)
l 用匯編器把匯編代碼進一步生成目標代碼(.o)
l 用連接器把生成的目標代碼和系統或用戶提供的庫連接起來,生成可執行文件
格式:
l gcc -E test.c//預處理階段
l Gcc -S test.c//編譯階段
l Gcc -c test.c//匯編階段
l Gcc -o test test.c//鏈接階段
二、Linux程序gdb調試步驟:
Gdb的功能:
l 設置斷點
l 監視程序變數的值
l 程序的單步執行
l 顯示、修改變數的值
l 顯示、修改寄存器
l 查看程序的堆棧情況
l 遠程調試
Gdb調試過程:
1、程序經過預處理後,即進入編譯階段,進入編譯階段,首先聲明編譯:
2、格式:gdb -o test test.c -g
3、進入編譯:gdb test
4、顯示需要編譯調試的源程序:l(list)//list filename
5、設置斷點:b(break)行號
6、查看設置的斷點:info b
7、運行調試程序:run
8、跳到下一個斷點:c(continue)
9、單步運行的話使用:n(next)/s(step into)跳到函數體 //區別在與:next執行函數體,而step不執行函數體
10、調試過程中查看某個變數的變化:print i (每次都要手動設置)//display i(設置一次一直尾隨,直到用「undisplay 變數標號」 停止)
11、退出當前的調試使用finish 跳出函數
12、清楚斷點 clear 行號
13、Delete 斷點信息序號// 刪除所有斷點或設置的要刪除的斷點
14、退出調試 q
15、b num if i==20 設置斷點的觸發條件
16、condition num i==50 改變斷點的觸發條件
Ⅵ 網站源代碼如何在線進行調試
開發調試環境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源碼
由於AS是基於IntelliJ IDEA開發的,所以本文也適用於IntelliJ IDEA
一、修改Android Studio(以下簡稱AS)的內存配置
因為在導入源碼時需要消耗大量內存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的機器修改studio.vmoptions)中-Xms和-Xmx的值。文檔中使用的是748m, 可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一個沒有classpath的JDK, 這樣可以確保使用源碼里的庫文件
並將其作為要使用的SDK的java SDK。如下圖
三、生成導入AS所需配置文件(*.ipr)
①編譯源碼(為了確保生成了.java文件,如R.java;如果編譯過,則無需再次編譯)
②檢查out/host/linux-x86/framework/目錄下是否有idegen.jar
如果idegen.jar不存在,執行:
mmm development/tools/idegen/
在5.0.1的源碼中會生成res.java的文件夾,導致idegen.jar運行時拋FileNotFoundException,這是idegen的代碼不夠嚴謹造成的。
我的分享里有修改這個bug的patch,或者直接使用我分享的idegen.jar。
③執行
development/tools/idegen/idegen.sh
等待出現類似下面的結果:
Read excludes: 5ms
Traversed tree: 44078ms
這時會在源碼的根目錄下生成android.ipr和android.iml兩個IntelliJ IDEA(AS是基於IntelliJ IDEA社區版開發的)的配置文件
Tips:
AS在導入代碼時比較慢,建議先修改android.iml,將自己用不到的代碼exclude出去.可以仿照過濾.repo文件夾的語法,如:
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
這樣在導入時就會跳過abi和art文件夾.過濾的越多,AS的處理速度就會越快.
④在AS中打開源碼根目錄下新生成的android.ipr
如果在導入時AS出現
則建議按照其給定的解決方法來解決(網址:http://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit),具體內容如下圖:
四、解決源碼中跳轉錯誤問題
①為當前工程設置正確的SDK和JDK
②設置'Moles'的依賴
先將所有依賴刪掉,只留下上圖'1'所指向的兩個(注意:這里刪除全部只是為了方便。如果確實用到了.jar,在將它們的路徑添加進來就可以了.
如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)
點擊上圖中'2'指向的'+'並選擇上圖'3'指向的'Jars or directories'選項,依次將frameworks和external文件夾添加進來.如:
其它版本的代碼在添加frameworks時可能會顯示成:
沒有關系,只是顯示問題,點擊OK還是會把frameworks路徑添加進去的.
如果還有代碼跳轉錯誤,請仿照上面的步驟將相應代碼的路徑或jar文件添加到其Dependencies標簽頁中即可.
五、DEBUG源碼
我們可以通過給剛導入的工程在'Moles'中添加'Android Framework'來讓AS將它作為一個Android工程,從而方便我們調試代碼.
可以按照上圖中'1'和'2'來添加Android Framework支持.
在代碼中加斷點,然後選擇'Run'->'Attach debugger to Android process'或者直接點擊下圖所示的圖標
在彈出的選擇進程(Choose Process)對話框中,勾選顯示所有進程,選擇要DEBUG的代碼所在的進程,點擊OK即可.
六、其它
代碼中很多地方提示Call requires API Level x.... 出現這個問題是因為AS將我們的工程當做安卓應用程序工程了,且源碼中沒有指定minSdkVersion.
我們只需在源碼根目錄加一個聲明minSdkVersion的AndroidManifest.xml文件即可(分享了一個AndroidManifest.xml)。
也可以考慮使用build.gradle來解決該問題。
Ⅶ cygwin下編譯,調試C源程序
你是初學者吧,沒關系,很簡單的。
cygwin我沒用過,大概是別人給套了個可視化編程界面了。
1.你運行cygwin這個軟體,然後「文件/打開/」把你准備好的C源代碼載入到這個軟體中。(就好比我們平時用word時,先運行word軟體,然後把你的文檔加如入並進行編輯。)
2.在軟體界面上(一般在:工具欄)找一個功能為「運行」的按紐。
准備知識:
寫一個程序一般分以下步驟:
1.編輯(就是把你的源代碼寫出來,你可以用「記事本」寫,當然一般編程工具cygwin也會提供編輯環境)
2.編譯+連接(你只要點個按紐就行,這個任務完全由cygwin完成,你不必管它怎麼完成這個任務的。
==============================
那麼,編譯是什麼意思呢?
==============
由於你是初學者,我只能用盡可能通俗的話給你解釋一下,這種解釋是不夠准確的。因為計算機本身只認識二進制指令,就是0/1的序列,每個0/1的序列都在計算機設計時,就賦予了一定的含義。比如:設計師可以把0001表示作個加法,用0000表示作個減法。但是如果人們用0/1的序列來表達我們的需求,顯然非常麻煩。於是,後來一些科學家就發明了一種近似英語的計算機語言C,很明顯如果要讓計算機也明白C表達的意思,我們就必須把C翻譯成0/1的序列。那麼,編譯就可以理解為「翻譯」。
[打個比方1]這就好比,你是個中國人,你只會說中文,計算機是個美國人,它只會說英語。你要請計算機給你做件事,你可以用中文寫好你的要求,然後請個翻譯,把你的要求翻譯成英語。)
======
調試是什麼呢?
=====
調試分兩個層面:(沿用上面的比方1)
1.語法層
你用中文表達你的要求時,可能你的用語不夠規范,或寫了錯別字,使得你
請的翻譯不理解你的意思,沒辦法翻譯下去。這時,這個翻譯就會通知你說:「對不起,你這個字是不是寫錯了」。於是,你就「調整調整,修改修改,才試一試」(「調試」由此得名),然後才請翻譯進行翻譯。
2.語意層
由於你的疏忽,你把要求表達錯了。舉個離譜點的例子:你本意是打算請計算機幫你買張去北京的火車票的,結果你不小心,寫成了買張去上海的火車票。出現這個錯誤,翻譯沒方法告訴你,只有等計算機把一張上海的車票給你,你才意識到,於是你重新調試,才執行。
Ⅷ 如何調試跟蹤Android Framework源代碼
本文講解如何在Eclipse中導入Android源代碼(包括Framework和Application的代碼),然後通過模擬器或真機跟蹤/調試Android的Java代碼,區別於一般基於Android SDK的純應用開發,這里可以跟蹤/調試Framework中的代碼。
一、准備工作
確保機器上已經安裝並配置下列軟體環境:JDK/ Eclipse / Android SDK / ADT
即,機器上已經安裝了Eclipse下Android應用開發所需的環境。如果還未配置,移步《搭建Windows下Android應用開發環境——Eclipse/Android/ADT》。
另外,為了跟蹤調試Android源碼,你還需要有Android源碼,並有源碼的編譯環境,可以是:
虛擬機環境 虛擬機中安裝Linux,Linux下編譯Android源碼。此環境下,如果要在宿主機的Eclipse中調試,還需要把Android的源碼路徑共享出來,宿主機可訪問到;
有單獨的可編譯Android的網路環境 在你的客戶端的機器上訪問伺服器共享出來的Android的源碼路徑;
Linux環境下直接通過Eclipse跟蹤調試本機上的Android源碼。
-Xms40m
-Xmx384m
-Xms128m
-Xmx512m
注意:不管哪種工作方式,Android源碼要都是已經編譯過的,且編譯時採用的是Eng模式(vs User mode)。編譯Android Platform和Kernel的過程,可參考《Ubuntu10.10下編譯Android2.2平台》及《Ubuntu10.10下編譯Android2.2內核》。
二、基本設置
准備工作完畢之後,現在做一些基本的設置。
1. 把Android源碼路徑<Android_ROOT>下的developmentideeclipse中的.classpath文件復制到<Android_ROOT>下;如果需要在模擬器中進行調試的話,需要復制三個img(具體方法見http://wenku..com/view/26d9063c87c24028915fc366.html)
2. 修改Eclipse的設置
修改eclipse.ini文件,更改下列內容:
[plain]view plain
改為:
[java]view plain
這里增大最小Java堆大小到128MB,增大最大Java堆大小到512MB。
三、Eclipse中創建工程
1. File > New > Java Project
Ⅸ 如何在Visual C++ 6.0調試多源代碼C程序!
首先是對於頭文件,要是系統給定的就不需要進行調試了;要是自己寫的頭文件,你應該打開頭文件,然後運行就可以了,我用的是中文界面,英文的也沒有關系,你只要單擊那個紅色的感嘆號就行了。只要把頭文件打開,對於你說的程序函數部分,我想你可能是要表達一個子函數的意思(因為沒有聽過這個名詞),要是子函數是單獨在一個文件中的時候,子函數應該在第二步進行調試。當然要是子函數寫在主函數(即main())只要一起運行就可以了,這個過程中會彈出許多對話框,你只要全確定就可以(想換名字是另一回事了),要是有錯會報的。 當然也可以不必運行,按ctrl+F7隻進行編譯也行
Ⅹ 如何在電腦上調試b2b2c源代碼
第一步,調試的准備。用C#語言編寫一個測試dll文件的程序,由於dll源程序是c的,且運行結果是黑屏的,所以C#代碼也是運行在黑屏的console環境下。完整代碼如下。using System;using System.Collections.Generic;using System.Linq;using System....