Aracılığıyla paylaş


Dil Belirtimi 1

Uyarı

Bu konuda SrcSrv'nin iç işlemi açıklanmaktadır. Kaynak yolların nasıl çalıştığı hakkında genel bilgi için bkz. Kaynak Yolu. SrcSrv kullanma hakkında bilgi için bkz. SrcSrv kullanma. Ortamınızda kaynak yükleme işleminin geçerli işlemini belirlemek için,.srcnoisy (Gürültülü Kaynak Yükleme) bölümünde açıklandığı gibi gürültülü kaynak yüklemeyi etkinleştirin

SrcSrv'nin ilk sürümü aşağıdaki gibi çalışır. (Bu davranış gelecek sürümlerde değişebilir.)

İlk olarak, istemci tüm kaynak dosya ayıklamaları için temel olarak kullanılacak hedef yol ile SrcSrvInit'i çağırır. Bu yol özel değişken TARG'de depolanır.

DbgHelp bir modülün .pdb dosyasını yüklediğinde, .pdb dosyasından SrcSrv akışını ayıklar ve SrcSrvLoadModule çağrısı yaparak bu veri bloğunu SrcSrv'ye geçirir.

Ardından DbgHelp'in bir kaynak dosya alması gerektiğinde, belirtilen kaynak dosyayı sürüm denetiminden almak için SrcSrvGetFile'ı çağırır.

SrcSrv, istenen kaynak belirtim ile tam olarak eşleşen bir girdi için veri bloğundaki tüm kaynak dosya girdilerini gözden geçirin. Bu eşleşme VAR1'de bulunur.

SrcSrv girdiyi bulduklarından sonra, özel değişkenleri (VAR1, VAR2, vb.) bu kaynak dosya girişinin içeriğiyle doldurur. Ardından SRCSRVTRG değişkeni bu özel değişkenler kullanılarak çözümlenir.

Aşağıda SRCSRVTRG değişkeninin özel değişkenler kullanılarak nasıl çözüldüğü gösterilmektedir. Kaynak yolun hala olduğunu varsayıyoruz:

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

Her satırda bir özel değişkenin daha çözünürlüğü gösterilir. Çözümlenen değişkenler kalındır.

SRCSRVTRG=%sdtrg% 
SDTRG=%targ%\%var2%\%fnbksl%(%var3%)\%var4%\%fnfile%(%var1%)
c:\src\%var2%\%fnbksl%(%var3%)\%var4%\%fnfile%(%var1%)
c:\src\WIN_SDKTOOLS\%fnbksl%(%var3%)\%var4%\%fnfile%(%var1%)
c:\src\WIN_SDKTOOLS\%fnbksl%( sdktools/debuggers/srcsrv/shell.cpp )\%var4%\%fnfile%(%var1%)
c:\src\WIN_SDKTOOLS\ sdktools\debuggers\srcsrv\shell.cpp\%var4%\%fnfile%(%var1%)
c:\src\WIN_SDKTOOLS\sdktools\debuggers\srcsrv\shell.cpp\3\%fnfile%(%var1%)
c:\src\WIN_SDKTOOLS\sdktools\debuggers\srcsrv\shell.cpp\3\%fnfile%( c:\db\srcsrv\shell.cpp)
c:\src\WIN_SDKTOOLS\sdktools\debuggers\srcsrv\shell.cpp\3\shell.cpp

Oluşturulan bu hedef yolun benzersiz olduğuna ve aynı dosyanın iki sürümünün aynı konuma ayıklanmasına izin vermediğinden emin olun.

SrcSrv artık dosyanın zaten orada olup olmadığını görmek için görünüyor. Bu durumda, SrcSrv arayana konumu döndürür. Aksi takdirde, SrcSrv, SRCSRVCMD'yi çözümleyerek dosyayı ayıklamak için yürütme komutunu oluşturur.

Aşağıdaki örnekte, her satır bir özel değişkenin daha çözünürlüğünü gösterir. Çözümlenen değişkenler kalın yazılmıştır.

DEPOT=//depot 
WIN_SDKTOOLS= sserver.microsoft.com:4444 
SRCSRVCMD=%sdcmd% 
SDCMD=sd.exe -p %fnvar%(%var2%) print -o %srcsrvtrg% -q %depot%/%var3%#%var4% 
sd.exe -p %fnvar%(WIN_SDKTOOLS) print -o %srcsrvtrg% -q %depot%/%var3%#%var4% 
sd.exe -p sserver.microsoft.com:4444  print -o %srcsrvtrg% -q %depot%/%var3%#%var4% 
sd.exe -p sserver.microsoft.com:4444  print -o c:\src\WIN_SDKTOOLS\sdktools\debuggers\srcsrv\shell.cpp\3\shell.cpp -q %depot%/%var3%#%var4% 
sd.exe -p sserver.microsoft.com:4444  print -o c:\src\WIN_SDKTOOLS\sdktools\debuggers\srcsrv\shell.cpp\3\shell.cpp -q //depot/%var3%#%var4% 
sd.exe -p sserver.microsoft.com:4444  print -o c:\src\WIN_SDKTOOLS\sdktools\debuggers\srcsrv\shell.cpp\3\shell.cpp -q //depot/ sdktools/debuggers/srcsrv/shell.cpp#%var4% 
sd.exe -p sserver.microsoft.com:4444  print -o c:\src\WIN_SDKTOOLS\sdktools\debuggers\srcsrv\shell.cpp\3\shell.cpp -q //depot/ sdktools/debuggers/srcsrv/shell.cpp#3 

Şimdi SrcSrv bu komutu yürütür. Bu komutun sonucu beklenen konumdaki bir dosyaysa, bu yol çağırana döndürülür.

Bir değişken çözümlenemiyorsa, bunu bir işletim sistemi ortam değişkeni olarak aramaya çalışıldığını unutmayın. Bu başarısız olursa, değişken adı işlenen metinden silinir.

Birbirini izleyen iki yüzde işareti karakteri tek bir yüzde işareti olarak yorumlanır.

Kaynak Sunucu Veri Blokları

SrcSrv, .pdb dosyasındaki iki veri bloğunu, kaynak dosya listesini ve veri bloğunu kullanır.

Kaynak dosya listesi, bir modül oluşturulduğunda otomatik olarak oluşturulur. Bu liste, modülü derlemek için kullanılan kaynak dosyaların tam yollarını içerir.

Veri bloğu kaynak dizin oluşturma sırasında oluşturulur. Şu anda .pdb dosyasına "srcsrv" adlı alternatif bir akış eklenir. Bu verileri ekleyen betik, kullanımda olan belirli derleme işlemine ve kaynak denetim sistemine bağlıdır.

Veri bloğu üç bölüme ayrılır: ini, değişkenler ve kaynak dosyalar. Veri bloğu 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ıdır ve çözümlenecek bir değişken olarak kabul edilmelidir.

%fnbksl%()
Parametre metnindeki tüm eğik çizgiler (/) ters eğik çizgiler (\) ile değiştirilmelidir.

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

Veri bloğunun [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. Aşağıdaki örneklere bakın:

SÜRÜM
Dil belirtimi sürümü. Bu değişken gereklidir. Geçerli dil belirtimini temel alan bir betik geliştirirseniz, bu değeri 1 olarak ayarlayın. SrcSrv istemci kodu, kendi değerinden daha büyük bir değere sahip olan herhangi bir betiği yürütmeye çalışmaz. SrcSrv'nin geçerli sürümleri 2 değerini kullanır.

VERCTRL
Kaynak sürüm denetim sistemini 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.

Veri bloğunun [variables] 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. Herhangi bir ayıklama komutunun yürütülmesi gerekiyorsa bu gereklidir.

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

SRCSRVVERCTRL
Kullanımda olan sürüm denetim sistemini belirtir. Perforce için bu perforce'tır. Team Foundation Server için bu tfs'dir. Bu değişken sunucu hatalarını kalıcı hale getirmek için kullanılır. Bu isteğe bağlı bir değişkendir.

SRCSRVVERRDESC
Sürüm denetimi istemcisi ayıklanması gereken kaynak dosyaları içeren sunucuyla iletişim kuramadığında görüntülenecek metni belirtir. SrcSrv, bağlantı sorunlarını denetlemek için bu değeri kullanır. Bu isteğe bağlı bir değişkendir.

SRCSRVERRVAR
Dosya girdisindeki hangi değişkenin sürüm denetimi sunucusuna karşılık olduğunu gösterir. Önceki hatalara göre çalışmayan komutları tanımlamak için SrcSrv tarafından kullanılır. Metnin biçimi X'tir; buradaX , belirtilen değişkenin sayısıdır. Bu isteğe bağlı bir değişkendir.

Veri bloğunun [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:

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 düzeltme numarasıdır. Ancak, kaynak denetim sistemlerinin çoğu dosyaları belirli bir derlemenin kaynak durumunun geri yüklenebileceği şekilde etiketlemeyi destekler. Bu nedenle, bunun yerine derleme için etiketi 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%) print -o %srcsrvtrg% -q %depot%/%var3%@%label%

Sunucu Hatalarını İşleme

Bazen istemci tek bir sürüm denetim sunucusundan hiç dosya ayıklayamaz. Bunun nedeni sunucunun ağdan kapalı olması veya kullanıcının kaynağa erişmek için uygun ayrıcalıklara sahip olmaması olabilir. Ancak, bu kaynağı almaya çalışırken harcanan süre işleri önemli ölçüde yavaşlatabilir. Bu durumda, kullanılamadığı kanıtlanmış bir kaynaktan ayıklama girişimini devre dışı bırakmak en iyisidir.

SrcSrv bir dosyayı ayıklayamazsa, komutu tarafından oluşturulan çıkış metnini inceler. Bu komutun herhangi bir bölümü SRCSRVERRDESC içeriğinin tam eşleşmesini içeriyorsa, gelecekteki tüm komutlar aynı sürüm denetim sunucusuna atlanır. SRCSRVERRDESC değişken adının sonuna sayı veya rastgele metin ekleyerek birden çok hata dizesi tanımlayabileceğinizi unutmayın. Aşağıda bir örnek verilmiştir:

SRCSRVERRDESC=lime: server not found
SRCSRVERRDESC_2=pineapple: network error

Sunucunun kimliği SRCSRVERRVAR'dan alınır. Bu nedenle, SRCSRVERRVAR "var2" içeriyorsa ve .pdb dosyasındaki dosya girişi aşağıdaki gibi görünüyorsa:

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

2. değişkende "TOOLS_PRJ" içeren bir dosya girdisi kullanarak gelecekteki tüm kaynak alma girişimleri atlanır.

Srcsrv.ini düzenleyerek hata ayıklayıcısı istemcisine hata göstergeleri de ekleyebilirsiniz. Ayrıntılar için srcsrv.ini örnek sürümüne bakın.