Aracılığıyla paylaş


Kaynak Sunucu

Kaynak sunucu, istemcinin bir uygulama oluşturmak için kullanılan kaynak dosyaların tam sürümünü almasını sağlar. Bir modülün kaynak kodu sürümler arasında ve yıllar içinde değişebileceğinden, söz konusu modülün sürümü oluşturulurken kaynak kodun mevcut olduğuna bakmak önemlidir.

Kaynak sunucu, kaynak denetiminden uygun dosyaları alır. Kaynak sunucuyu kullanmak için uygulamanın kaynak dizini oluşturulmuş olması gerekir.

Kaynak Dizin Oluşturma

Kaynak dizin oluşturma sistemi yürütülebilir dosyalardan ve Perl betiklerinden oluşan bir koleksiyondur. Perl betikleri Için Perl 5.6 veya üzeri gerekir.

Genellikle ikili dosyalar, uygulama oluşturulduktan sonra derleme işlemi sırasında kaynak dizini oluşturulur. Kaynak sunucu için gereken bilgiler PDB dosyalarında depolanır.

Kaynak sunucu şu anda aşağıdaki kaynak denetim sistemleriyle çalışması gereken betiklerle birlikte gönderilir.

  • Team Foundation Server
  • Perforce
  • Visual SourceSafe
  • CVS
  • Yıkılma

Ayrıca, farklı bir kaynak denetim sistemi için kodunuzu dizine eklemek için özel bir betik de oluşturabilirsiniz.

Aşağıdaki tabloda kaynak sunucu araçları listelenmiştir.

Alet Açıklama
Srcsrv.ini Bu dosya, tüm kaynak denetim sunucularının ana listesidir. Her girişin biçimi şu şekildedir:MYSERVER=serverinfo
Perforce kullanılırken, sunucu bilgileri sunucunun tam ağ yolundan, ardından iki nokta üst üste ve ardından kullandığı bağlantı noktası numarasından oluşur. Mesela:
MYSERVER=machine.corp.company.com:1666
Bu dosya, hata ayıklayıcısını çalıştıran bilgisayara yüklenebilir. Kaynak sunucu başlatıldığında, değerler için Srcsrv.ini bakar; bu değerler PDB dosyasında yer alan bilgileri geçersiz kılar. Bu, kullanıcıların hata ayıklama zamanında alternatif bir kaynak denetim sunucusu kullanacak şekilde hata ayıklayıcı yapılandırmasına olanak tanır.
Daha fazla bilgi için kaynak sunucu araçlarıyla yüklenen Srcsrv.ini örneğine bakın.
Ssindex.cmd Bu betik, her dosyanın sürüm bilgileriyle birlikte kaynak denetiminde denetlenen dosyaların listesini oluşturur. Uygulamayı oluştururken oluşturulan .pdb dosyalarında bu bilgilerin bir alt kümesini depolar. Betik, kaynak denetimiyle arabirim yapmak için aşağıdaki Perl modüllerinden birini kullanır: P4.pm (Perforce) veya Vss.pm (Visual Source Safe). Daha fazla bilgi için betiği ile çalıştırın: -? veya-?? (ayrıntılı yardım) seçeneğini belirleyin veya betiği inceleyin.
Srctool.exe Bu yardımcı program bir .pdb dosyası içinde dizine alınan tüm dosyaları listeler. Her dosya için dosyanın tam yolunu, kaynak denetim sunucusunu ve sürüm numarasını listeler. Kaynak sunucuyu kullanmadan dosyaları almak için bu bilgileri kullanabilirsiniz. Daha fazla bilgi için yardımcı programını /? ile çalıştırın seçenek.
Pdbstr.exe Bu yardımcı program, dizin oluşturma betikleri tarafından hedef .pdb dosyasının "srcsrv" alternatif akışına sürüm denetimi bilgilerini eklemek için kullanılır. Ayrıca bir .pdb dosyasından herhangi bir akışı okuyabilir. Dizin oluşturma betiklerinin düzgün çalıştığını doğrulamak için bu bilgileri kullanabilirsiniz. Daha fazla bilgi için yardımcı programını /? ile çalıştırın seçenek.

 

Kaynak Dosyayı Alma

DbgHelp API'SymGetSourceFile işlevi aracılığıyla kaynak sunucu işlevselliğine erişim sağlar. Alınacak kaynak dosyanın adını almak için SymEnumSourceFiles veya SymGetLineFromAddr64 işlevini çağırın.

Kaynak Sunucuyu Hata Ayıklayıcı ile Kullanma

Kaynak sunucuyu WinDbg, KD, NTSD veya CDB ile kullanmak için Windows için Hata Ayıklama Araçları paketinin (sürüm 6.3 veya üzeri) son bir sürümünü yüklediğinizden emin olun. Ardından, .srcpath komutuna aşağıdaki gibi srv* ekleyin:

.srcpath srv*;c:\mysource

Bu örnekte geleneksel bir kaynak yolunun da yer aldığına dikkat edin. Hata ayıklayıcı dosyayı kaynak sunucudan alamıyorsa, belirtilen yolu arar.

Kaynak sunucu tarafından bir kaynak dosya alınırsa, hata ayıklama oturumu bittikten sonra sabit sürücünüzde kalır. Kaynak dosyalar, Windows için Hata Ayıklama Araçları yükleme dizininin src alt dizininde yerel olarak depolanır.

Kaynak Sunucu Veri Blokları

Kaynak sunucu, PDB dosyasındaki iki veri bloğuna dayanır.

  • Kaynak dosya listesi. Modül oluşturmak, modülü derlemek için kullanılan kaynak dosyalara yönelik tam yolların listesini otomatik olarak oluşturur.
  • Veri bloğu. Daha önce açıklandığı gibi kaynağı dizine almak PDB dosyasına "srcsrv" adlı alternatif bir akış ekler. Bu verileri ekleyen betik, kullanımda olan belirli derleme işlemine ve kaynak denetim sistemine bağlıdır.

Dil belirtimi sürüm 1'de veri bloğu üç bölüme ayrılır: ini, değişkenler ve kaynak dosyalar. Aşağıdaki söz dizimine sahiptir.

SRCSRV: ini ------------------------------------------------ 
VERSION=1
VERCTRL=<source_control_str>
DATETIME=<date_time_str>
SRCSRV: variables ------------------------------------------ 
SRCSRVTRG=%sdtrg% 
SRCSRVCMD=%sdcmd% 
SRCSRVENV=var1=string1\bvar2=string2 
DEPOT=//depot 
SDCMD=sd.exe -p %fnvar%(%var2%) print -o %srcsrvtrg% -q %depot%/%var3%#%var4%
SDTRG=%targ%\%var2%\%fnbksl%(%var3%)\%var4%\%fnfile%(%var1%) 
WIN_SDKTOOLS= sserver.microsoft.com:4444 
SRCSRV: source files --------------------------------------- 
<path1>*<var2>*<var3>*<var4> 
<path2>*<var2>*<var3>*<var4> 
<path3>*<var2>*<var3>*<var4> 
<path4>*<var2>*<var3>*<var4> 
SRCSRV: end ------------------------------------------------

Yüzde işareti (%) içine alınmış metin dışında tüm metin tam anlamıyla yorumlanır. Yüzde işaretleri içine alınmış metin, aşağıdaki işlevlerden biri olmadığı sürece özyinelemeli olarak çözümlenecek bir değişken adı olarak kabul edilir:

%fnvar%()

Parametre metni yüzde işaretleri içine alınmalı ve genişletilecek bir değişken olarak kabul edilmelidir.

%fnbksl%()

Parametre metnindeki tüm eğik çizgi (/) ters eğik çizgilerle (\) değiştirilmelidir.

%fnfile%()

Parametre metnindeki tüm yol bilgileri çıkarılmalı ve yalnızca dosya adı bırakılmalıdır.

ini bölümü, gereksinimleri açıklayan değişkenler içerir. Dizin oluşturma betiği bu bölüme istediğiniz sayıda değişken ekleyebilir. Örnekler şunlardır:

SÜRÜM

Dil belirtimi sürümü. Bu değişken gereklidir.

VERCTL

Kaynak denetim ürününü açıklayan bir dize. Bu değişken isteğe bağlıdır.

DATETIME

PDB dosyasının işlendiği tarih ve saati gösteren dize. Bu değişken isteğe bağlıdır.

Değişkenler bölümü, kaynak denetiminden bir dosyanın nasıl ayıklandığını açıklayan değişkenler içerir. Veri bloğunun boyutunu küçültmek için yaygın olarak kullanılan metinleri değişken olarak tanımlamak için de kullanılabilir.

SRCSRVTRG

Ayıklanan dosya için hedef yolun nasıl derlendiğini açıklar. Bu gerekli bir değişkendir.

SRCSRVCMD

Dosyayı kaynak denetiminden ayıklamak için komutunun nasıl derleyebileceğinizi açıklar. Bu, yürütülebilir dosyanın adını ve komut satırı parametrelerini içerir. Bu gerekli bir değişkendir.

SRCSRVENV

Dosya ayıklama sırasında oluşturulacak ortam değişkenlerini listeleyen bir dize. Birden çok girdiyi bir geri al karakteri (\b) ile ayırın. Bu isteğe bağlı bir değişkendir.

Kaynak dosyalar bölümü, dizine alınmış her kaynak dosya için bir girdi içerir. Her satırın içeriği, VAR10'a kadar VAR1, VAR2, VAR3 gibi adlara sahip değişkenler olarak yorumlanır. Değişkenler yıldız işaretiyle ayrılır. VAR1, PDB dosyasının başka bir yerinde listelendiği gibi kaynak dosyanın tam yolunu belirtmelidir. Örneğin, aşağıdaki satır:

c:\proj\src\file.cpp*TOOLS_PRJ*tools/mytool/src/file.cpp*3

aşağıdaki gibi yorumlanır:

VAR1=c:\proj\src\file.cpp
VAR2=TOOLS_PRJ
VAR3=tools/mytool/src/file.cpp
VAR4=3

Bu örnekte, VAR4 bir sürüm numarasıdır. Ancak, kaynak denetim sistemlerinin çoğu dosyaları belirli bir derlemenin kaynak durumunun geri yüklenebileceği şekilde etiketlemeyi destekler. Bu nedenle, derleme için alternatif olarak etiketini kullanabilirsiniz. Örnek veri bloğu aşağıdaki gibi bir değişken içerecek şekilde değiştirilebilir:

LABEL=BUILD47

Ardından, kaynak denetim sisteminin etiketi belirtmek için at işaretini (@) kullandığını varsayarak, SRCSRVCMD değişkenini aşağıdaki gibi değiştirebilirsiniz:

sd.exe -p %fnvar%(%var2%) yazdırma -o %srcsrvtrg% -q %depot%/%var3%@%label%

Kaynak Sunucu Nasıl Çalışır?

Kaynak sunucu istemcisi Symsrv.dlliçinde uygulanır. İstemci doğrudan PDB dosyasından bilgi ayıklamaz; Dbghelp.dlluygulanan gibi bir sembol işleyicisi kullanır. Temelde kaynak denetim sisteminden uygun kaynak dosyayı ayıklamak için kullanılabilecek bir komut satırı oluşturan özyinelemeli bir değişken değiştirme altyapısıdır. Kodunuz doğrudan Symsrv.dll çağırmamalıdır. İşlevselliğini uygulamanızla tümleştirmek için SymGetSourceFile işlevini kullanın.

Kaynak sunucunun ilk sürümü aşağıdaki gibi çalışır. Bu davranış, gelecek sürümlerde değişebilir.

  • İstemci, SrcSrvInit işlevini tüm kaynak dosya ayıklamaları için temel olarak kullanılacak hedef yola çağırır. Bu yolu TARG değişkeninde depolar.
  • İstemci, PDB modülü yüklendiğinde PDB'den Srcsrv akışını ayıklar ve veri bloğunu kaynak sunucuya geçirmek için SrcSrvLoadModule işlevini çağırır.
  • Dbghelp bir kaynak dosyayı aldığında istemci, kaynak dosyaları kaynak denetiminden almak için SrcSrvGetFile işlevini çağırır.
  • Kaynak sunucu, veri bloğundaki kaynak dosya girdilerinde istenen dosyayla eşleşen bir girdi arar. VAR1'i VARn kaynak dosya girdisinin içeriğiyle doldurur. Ardından, VAR1 kullanarak SRCSRVTRG değişkenini VARngenişletir. Dosya zaten bu konumdaysa, konumu arayana döndürür. Aksi takdirde, SRCSRVCMD değişkenini genişleterek dosyayı kaynak denetiminden almak ve hedef konuma kopyalamak için gereken komutu oluşturur. Son olarak, bu komutu yürütür.

Kaynak Denetimi Sağlayıcısı Modülü Oluşturma

Kaynak sunucu Perforce (p4.pm) ve Visual Source Safe (vss.pm) için sağlayıcı modülleri içerir. Kendi sağlayıcı modülünüzü oluşturmak için aşağıdaki arabirim kümesini uygulamanız gerekir.

$module::SimpleUsage()

Amaç: BASIT modül kullanım bilgilerini STDOUT'a görüntüler.

Parametreler: Yok

Dönüş değeri: Yok

$module::VerboseUsage()

Amaç: STDOUT'a ayrıntılı modül kullanım bilgilerini görüntüler.

Parametreler: Yok

Dönüş değeri: Yok

$objref = $module::new(@CommandArguments)

Amaç: Sağlayıcı modülünün bir örneğini başlatır.

Parametreler: SSIndex.cmd tarafından tanınmayan tüm @ARGV bağımsız değişkenleri genel bağımsız değişkenler olarak kabul edilir.

Dönüş değeri: Sonraki işlemlerde kullanılabilecek bir başvuru.

$objref->GatherFileInformation($SourcePath, $ServerHashReference)

Amaç: Modülün $SourcePath parametresi tarafından belirtilen dizin için gerekli kaynak dizin oluşturma bilgilerini toplamasını sağlar. Modül, bu girdinin her nesne örneği için yalnızca bir kez çağrılacağını varsaymamalıdır, SSIndex.cmd farklı yollar için bunu birden çok kez çağırabilir.

Parametreler: (1) Dizin oluşturulacak kaynağı içeren yerel dizin. (2) Belirtilen Srcsrv.ini dosyasındaki tüm girişleri içeren bir karmaya başvuru.

Dönüş değeri: Yok

($VariableHashReference, $FileEntry) = $objref->GetFileInfo($LocalFile)

Amaç: Kaynak denetim sisteminden tek, belirli bir dosyayı ayıklamak için gerekli bilgileri sağlar.

Parametreler: Tam dosya adı

Dönüş değeri: (1) Döndürülen $FileEntry yorumlamak için gereken değişkenlerin karma başvurusu. SSIndex.cmd, kaynak dizin akışına yazılan bilgi miktarını azaltmak için tek bir hata ayıklama dosyası tarafından kullanılan her kaynak dosya için bu değişkenleri önbelleğe alır. (2) SrcSrv.dll bu dosyayı kaynak denetiminden ayıklamasına izin vermek için kaynak dizin akışına yazılacak dosya girişi. Bu satırın tam biçimi kaynak denetim sistemine özgüdür.

$TextString = $objref->LongName()

Amaç: Kaynak denetim sağlayıcısını son kullanıcıya tanımlamak için açıklayıcı bir dize sağlar.

Parametreler: Yok

Dönüş değeri: Kaynak denetim sisteminin açıklayıcı adı.

@StreamVariableLines = $objref->SourceStreamVariables()

Amaç: Kaynak denetim sağlayıcısının her hata ayıklama dosyası için kaynak akışına kaynak denetimine özgü değişkenler eklemesini sağlar. Örnek modüller gerekli EXTRACT_CMD ve EXTRACT_TARGET değişkenlerini yazmak için bu yöntemi kullanır.

Parametreler: Yok

Dönüş değeri: Kaynak akış değişkenleri için girdilerin listesi.