Linux MSBuild projenizi dağıtma, çalıştırma ve projenizin hatalarını ayıklama
Linux desteği Visual Studio 2017 ve sonraki sürümlerde kullanılabilir. Bu sürümlerin belgelerini görmek için içindekiler tablosunun üzerinde bulunan Sürüm açılan listesini Visual Studio 2017 veya Visual Studio 2019 olarak ayarlayın.
Visual Studio'da MSBuild tabanlı bir Linux C++ projesi oluşturduktan ve Linux Bağlantı Yöneticisi kullanarak projeye bağlandıktan sonra, projeyi çalıştırabilir ve hatalarını ayıklayabilirsiniz. Uzak hedefte kodu derler, yürütür ve hatalarını ayıklarsınız.
Visual Studio 2019 sürüm 16.1 ve üzeri: Hata ayıklama ve derleme için farklı Linux sistemlerini hedefleyebilirsiniz. Örneğin, IoT senaryolarını hedeflerken x64 üzerinde çapraz derleme yapabilir ve arm cihazına dağıtabilirsiniz. Daha fazla bilgi için, bu makalenin devamında yer alan Derleme ve hata ayıklama için farklı makineler belirtme bölümüne bakın.
Linux projenizle etkileşim kurmanın ve bunların hatalarını ayıklamanın çeşitli yolları vardır.
Kesme noktaları, izleme pencereleri ve bir değişkenin üzerine gelme gibi geleneksel Visual Studio özelliklerini kullanarak hata ayıklayın. Bu yöntemleri kullanarak, diğer proje türleri için normalde yaptığınız gibi hata ayıklayabilirsiniz.
Linux Konsolu penceresinde hedef bilgisayardan çıktıyı görüntüleyin. Hedef bilgisayara giriş göndermek için konsolunu da kullanabilirsiniz.
Linux projenizde hata ayıklama
Hata ayıklama özelliği sayfasında hata ayıklama modunu seçin.
GDB, Linux üzerinde çalışan uygulamalarda hata ayıklamak için kullanılır. Uzak bir sistemde (WSL değil) hata ayıklama yaparken GDB, projenin Hata Ayıklama özelliği sayfasındaki Hata Ayıklama Modu seçeneğinden seçilebilen iki farklı modda çalıştırılabilir:
GDB, Linux üzerinde çalışan uygulamalarda hata ayıklamak için kullanılır. GDB, projenin Hata Ayıklama özellik sayfasındaki Hata Ayıklama Modu seçeneğinden seçilebilen iki farklı modda çalışabilir:
gdbserver modunda GDB, uzak sistemdeki gdbserver'a bağlanan yerel olarak çalıştırılır.
gdb modunda, Visual Studio hata ayıklayıcısı uzak sistemde GDB'yi çalıştırır. GDB'nin yerel sürümü hedef bilgisayarda yüklü sürümle uyumlu değilse bu daha iyi bir seçenektir. Linux Konsolu penceresinin desteklediği tek mod budur.
Visual Studio'da standart Hata Ayıklama araç çubuğunu kullanarak uzak hedefi seçin.
Uzak hedef kullanılabilir olduğunda ada veya IP adresine göre listelendiğini görürsünüz.
Uzak hedefe henüz bağlanmadıysanız uzak hedefe bağlanmak için Linux Bağlantı Yöneticisi kullanma yönergelerini görürsünüz.
Yürütüleceğini bildiğiniz bir kodun sol oluğuna tıklayarak bir kesme noktası ayarlayın.
Kesme noktasını ayarladığınız kod satırında kırmızı bir nokta görüntülenir.
Hata ayıklamayı başlatmak için F5 tuşuna (veya Hata Ayıklamayı > Başlat Hata Ayıklamaya) basın.
Hata ayıklamaya başladığınızda, uygulama başlamadan önce uzak hedefte derlenmiş olur. Derleme hataları Hata Listesi penceresinde görüntülenir.
Hata yoksa uygulama başlatılır ve hata ayıklayıcı kesme noktasında duraklatılır.
Artık uygulamayla geçerli durumunda etkileşimde bulunabilir, değişkenleri görüntüleyebilir ve F10 veya F11 gibi komut tuşlarına basarak kodda adım adım ilerleyebilirsiniz.
Uygulamanızla etkileşime geçmek için Linux Konsolu'nu kullanmak istiyorsanız Linux Konsolunda Hata Ayıkla'yı > seçin.
Bu konsol, hedef bilgisayardan tüm konsol çıkışlarını görüntüler ve girişi alır ve hedef bilgisayara gönderir.
Diğer hata ayıklama seçeneklerini yapılandırma (MSBuild projeleri)
Komut satırı bağımsız değişkenleri, projenin Hata Ayıklama özellik sayfasındaki Program Bağımsız Değişkenleri öğesi kullanılarak yürütülebilir dosyaya geçirilebilir.
Projenin Hata Ayıklama özellik sayfalarında Başlatma Öncesi Komutunu kullanarak ortam değişkenini dışarı aktarabilirsiniz
DISPLAY
. Örneğin:export DISPLAY=:0.0
Ek Hata Ayıklayıcı Komutları girişi kullanılarak belirli hata ayıklayıcı seçenekleri GDB'ye geçirilebilir. Örneğin, SIGILL (geçersiz yönerge) sinyallerini yoksaymak isteyebilirsiniz. Yukarıda gösterildiği gibi Ek Hata Ayıklayıcı Komutları girdisine aşağıdakileri ekleyerek bunu başarmak için handle komutunu kullanabilirsiniz:
handle SIGILL nostop noprint
Projenin Hata Ayıklama özellik sayfasındaki GDB Yolu öğesini kullanarak Visual Studio tarafından kullanılan GDB yolunu belirtebilirsiniz. Bu özellik Visual Studio 2019 sürüm 16.9 ve sonraki sürümlerde kullanılabilir.
İşleme Ekle ile Hata Ayıklama
Visual Studio projeleri için Hata Ayıklama özellik sayfası ve CMake projeleri için Launch.vs.json ayarları, çalışan bir işleme eklemenizi sağlayan ayarlara sahiptir. Bu ayarlarda sağlananların ötesinde daha fazla denetime ihtiyacınız varsa, çözümünüzün veya çalışma alanınızın köküne adlı Microsoft.MIEngine.Options.xml
bir dosya yerleştirebilirsiniz. Basit bir örnek aşağıda verilmiştir:
<?xml version="1.0" encoding="utf-8"?>
<SupplementalLaunchOptions>
<AttachOptions>
<AttachOptionsForConnection AdditionalSOLibSearchPath="/home/user/solibs">
<ServerOptions MIDebuggerPath="C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\Common7\IDE\VC\Linux\bin\gdb\7.9\x86_64-linux-gnu-gdb.exe"
ExePath="C:\temp\ConsoleApplication17\ConsoleApplication17\bin\x64\Debug\ConsoleApplication17.out"/>
<SetupCommands>
<Command IgnoreFailures="true">-enable-pretty-printing</Command>
</SetupCommands>
</AttachOptionsForConnection>
</AttachOptions>
</SupplementalLaunchOptions>
AttachOptionsForConnection, ihtiyacınız olabilecek özniteliklerin çoğuna sahiptir. Yukarıdaki örnekte, daha fazla .so kitaplığının aranması için bir konum belirtme gösterilmektedir. ServerOptions alt öğesi, bunun yerine gdbserver ile uzak işleme eklemeyi etkinleştirir. Bunu yapmak için yerel bir gdb istemcisi (Visual Studio 2017'de gönderilen istemci yukarıda gösterilmiştir) ve simgeli ikilinin yerel bir kopyasını belirtmeniz gerekir. SetupCommands öğesi, komutları doğrudan gdb'ye geçirmenizi sağlar. Kullanılabilir tüm seçenekleri GitHub'daki LaunchOptions.xsd şemasında bulabilirsiniz.
MSBuild tabanlı Linux projelerinde derleme ve hata ayıklama için farklı makineler belirtme
Uzak bir Linux makinesini hedefleyen MSBuild tabanlı Linux projeleri ve CMake projeleri için uzak derleme makinenizi uzaktan hata ayıklama makinenizden ayırabilirsiniz. Örneğin, artık x64 üzerinde çapraz derleme yapabilir ve IoT senaryolarını hedeflerken arm cihazına dağıtabilirsiniz.
Varsayılan olarak, uzak hata ayıklama makinesi uzak derleme makinesiyle aynıdır (Yapılandırma Özellikleri>Genel>Uzak Derleme Makinesi). Yeni bir uzaktan hata ayıklama makinesi belirtmek için, Çözüm Gezgini'da projeye sağ tıklayın ve Yapılandırma Özellikleri>Hata Ayıklama Uzaktan Hata Ayıklama>Makinesi'ne gidin.
Uzaktan Hata Ayıklama Makinesi açılır menüsü, kurulan tüm uzak bağlantılarla doldurulur. Yeni bir uzak bağlantı eklemek için Araçlar>Seçenekler>Platformlar> Arası'na gidin Bağlantı Yöneticisi veya Hızlı Başlat'ta "Bağlantı Yöneticisi" araması yapın. Projenin Özellik Sayfalarında (Yapılandırma Özellikleri>Genel>Uzaktan Dağıtım Dizini) yeni bir uzaktan dağıtım dizini de belirtebilirsiniz.
Varsayılan olarak, yalnızca işlemin hata ayıklaması için gerekli dosyalar uzak hata ayıklama makinesine dağıtılır. Uzak hata ayıklama makinesine dağıtılacak kaynak dosyaları yapılandırmak için Çözüm Gezgini kullanabilirsiniz. Kaynak dosyaya tıkladığınızda, Çözüm Gezgini hemen altında Dosya Özellikleri'nin önizlemesini görürsünüz.
content özelliği, dosyanın uzak hata ayıklama makinesine dağıtılıp dağıtılmayacağını belirtir. Özellik Sayfaları>Configuration Manager'a gidip istenen yapılandırma için Dağıt'ın işaretini kaldırarak dağıtımı tamamen devre dışı bırakabilirsiniz.
Bazı durumlarda projenizin dağıtımı üzerinde daha fazla denetime ihtiyacınız olabilir. Örneğin, dağıtmak istediğiniz bazı dosyalar çözümünüzün dışında olabilir veya dosya veya dizin başına uzaktan dağıtım dizininizi özelleştirmek isteyebilirsiniz. Bu gibi durumlarda, .vcxproj dosyanıza aşağıdaki kod bloklarını ekleyin ve "example.cpp" yerine gerçek dosya adlarını yazın:
<ItemGroup>
<RemoteDeploy Include="__example.cpp">
<!-- This is the source Linux machine, can be empty if DeploymentType is LocalRemote -->
<SourceMachine>$(RemoteTarget)</SourceMachine>
<TargetMachine>$(RemoteDebuggingTarget)</TargetMachine>
<SourcePath>~/example.cpp</SourcePath>
<TargetPath>~/example.cpp</TargetPath>
<!-- DeploymentType can be LocalRemote, in which case SourceMachine will be empty and SourcePath is a local file on Windows -->
<DeploymentType>RemoteRemote</DeploymentType>
<!-- Indicates whether the deployment contains executables -->
<Executable>true</Executable>
</RemoteDeploy>
</ItemGroup>
CMake projeleri
Uzak linux makinesini hedefleyen CMake projeleri için, launch.vs.json'de yeni bir uzaktan hata ayıklama makinesi belirtebilirsiniz. Varsayılan olarak, "remoteMachineName" değeri, uzak derleme makinenize karşılık gelen CMakeSettings.json "remoteMachineName" özelliğiyle eşitlenir. Bu özelliklerin artık eşleşmesi gerekmez ve launch.vs.json içindeki "remoteMachineName" değeri, dağıtım ve hata ayıklama için hangi uzak makinenin kullanılacağını belirler.
IntelliSense, tüm kurulan uzak bağlantıların listesini önerir. Araçlar>Seçenekler>Platformlar> Arası'na giderek Bağlantı Yöneticisi hızlı başlat'ta "Bağlantı Yöneticisi" araması yaparak yeni bir uzak bağlantı ekleyebilirsiniz.
Dağıtımınız üzerinde tam denetim istiyorsanız, launch.vs.json dosyasına aşağıdaki kod bloklarını ekleyebilirsiniz. Yer tutucu değerlerini gerçek değerlerle değiştirmeyi unutmayın:
"disableDeploy": false,
"deployDirectory": "~\foo",
"deploy" : [
{
"sourceMachine": "127.0.0.1 (username=example1, port=22, authentication=Password)",
"targetMachine": "192.0.0.1 (username=example2, port=22, authentication=Password)",
"sourcePath": "~/example.cpp",
"targetPath": "~/example.cpp",
"executable": "false"
}
]
Sonraki adımlar
- Linux'ta ARM cihazlarında hata ayıklamak için şu blog gönderisine bakın: Visual Studio'da eklenmiş ARM cihazında hata ayıklama.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin