Henüz başlatılmamış bir işleme Visual Studio'yu nasıl ekleyebilirim?


91

Başlangıç ​​olaylarında hata ayıklamam gereken bazı nedenlerle (Excel 2010 şablon projesinden oluşturulan Excel dosyası) Visual Studio'dan çalıştırılamayan .NET programım var.

Program başlatıldıktan sonra gelen olaylarda hata ayıklamak istersem sorun olmaz. Programı explorer'dan çalıştırıyorum, işlemi Visual Studio'ya ekliyorum ve koda bazı kesme noktaları ekliyorum. Ancak burada, başlangıç ​​olaylarına kesme noktaları koymam gerekiyor. İşlemleri bir PID'ye değil, belirli bir işlem adına veya işe yarayacak başka bir çözüme bağlı olarak Visual Studio'ya ekleyebilmem gerekiyor.

Tabii ki Thread.Sleep(1000), süreci Visual Studio'ya eklemek için bana biraz zaman vermek için başlangıç ​​etkinliklerime bir eklemek söz konusu değil!

Yanıtlar:


99

Aslında yapabilirsiniz; ona bağlanmazsan başlatırsın. Projenizin özelliklerinde, Hata Ayıklama sekmesinde, "Komut" metin kutusunda eklemek istediğiniz programın yolunu belirtin.

Ayrıca "Komut Bağımsız Değişkenleri" kutusuna program için herhangi bir komut satırı bağımsız değişkenini de girebilirsiniz:

görüntü açıklamasını buraya girin

"Ekle" seçeneğinin "Hayır" olarak ayarlandığından emin olun.


6
İyi bir çözüm, ancak bu durumda F5'e basmanın işe yaramayacağını unutmayın. Bunun yerine ilgili projeye sağ tıklayın ve bağlam menüsünden 'Hata Ayıkla> Yeni örnek başlat'ı tıklayın.
Herman Cordes

2
F5'in çalışması için projenizin çözümde Başlangıç ​​Projesi olması gerekir. Bunu yapmak için, çözüm gezgininde projeye sağ tıklayın ve "Başlangıç ​​projesi olarak ayarla" seçeneğini seçin.
Tibi

1
Ayrıca programınızın bazı harici bağımlılıkları varsa, "Çalışma Dizini" ni de değiştirmeniz gerekir.
Priyank

"Yerel kod hata ayıklamasını etkinleştir" seçeneğini işaretlemek gerekebilir (proje özellikleri → Hata AyıklaHata Ayıklayıcıları Etkinleştir ).
Peter Mortensen

Ve bunu 40 projeli bütün bir çözüm için nasıl yaparsınız?
Tony Tannous

23

Başlangıçta bir istisna atarak çöken harici olarak oluşturulan bir süreçte bir C ++ eklentisinde hata ayıklıyordum ve bu benim için mükemmel çalıştı:

Visual Studio için ücretsiz Reattach Uzantısını ekleyin . Başlatılmadan önce işlem adına yeniden eklemesini isteyin. İşlem adının başlamasını beklediğini söyleyen kalıcı bir iletişim kutusu açacaktır.

Şimdi işlemi başlatın ve Visual Studio hata ayıklayıcı hemen eklenecek, istisnaları yakalayacak ve kesme noktalarına ulaşacaktır.


Bin kere evet!
itslittlejohn

Bir çıkmaza girdim. Hedefim başlatıldığında yönetici kimlik doğrulaması istedi ve pwd yazıp vs'yi yeniden başlattıktan sonra Reattach gitti. Yalnızca yönetici yetkilendirmesiz ve yönetici kimlik doğrulaması olmadan Yeniden İliştirme içerir.
Eric

2
Benim için çalışmıyor. Çarpma meydana geldikten sonra hala çok geç takılıyor. Saniyede bir mevcut süreçleri kontrol ediyor gibi görünüyor, bu uygulama için tamamen anlamsız.
riv

22

Visual Studio 2017-2019'unuz varsa şu adımları izleyin:

  1. Dosya> Aç> Proje / Çözüm
  2. .Exe dosyanızı seçin
  3. Hata Ayıkla> Hata Ayıklamayı Başlat

Diğer önerilerden çok daha kolay: proje özellikleriyle uğraşmanıza gerek yok ve hiçbir uzantıya gerek yok.


Ancak, Visual Studio'ya hata ayıklama sembollerinin nerede olduğunu, eğer onları otomatik olarak bulamazsa, söylemeniz gerekecek
Matt Thomas

1
5 saniyede hızlıca yapabiliyorum, bayıldım. Teşekkürler
YoldaşJoecool

1
Benim exe başlatıldı, ancak kesme noktası ayarlanamadı. Ne yapmalıyım?
Eric

2
@Eric Yukarıdaki yorumum bu konuyu ele almıyorsa, bunu yorum yerine SO sorusu olarak sormanızı öneririm. Sorununuz daha fazla görünürlük kazanacak ve özel senaryonuzu açıklama şansınız olacak. O halde ne bulduğunuzu bize bildirin!
Matt Thomas

11

Bu yanıtı benzer bir şey ararken buldum. Benim durumumda, yürütülebilir dosyayı projemin başlangıç ​​programı olarak kullanamazdım çünkü kolayca yeniden üretemediğim çok özel bir ortamda başlatılması gerekiyordu (yani: cygwin'den başlatıldı).

Mrstrange tarafından önerilen Reattach Uzantısına ve aynı zamanda çok benzer Attach To Anything'e bir göz attım. uzantısına ... ancak yürütülebilir kadar hızlı gibi görünüyordu.

Sonunda bana yardımcı olan şey şuydu: https://stackoverflow.com/a/4042545/1560865 , Nasıl Yapılır: Hata Ayıklayıcıyı Otomatik Olarak Başlatma adlı MSDN makalesine atıfta bulunarak sırayla aşağıdaki adımları listeliyor:

  1. Kayıt Defteri Düzenleyicisi'ni (regedit) başlatın.
  2. Kayıt Defteri Düzenleyicisi'nde, HKEY_LOCAL_MACHINE klasörünü açın.
  3. HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ currentversion \ görüntü dosyası yürütme seçeneklerine gidin.
  4. In Image File Execution Options klasörüne gibi hata ayıklamak istediğiniz uygulamanın adını bulun uygulam.exe . Hata ayıklamak istediğiniz uygulamayı bulamazsanız:
    a. Görüntü Dosyası Yürütme Seçenekleri klasörüne sağ tıklayın ve kısayol menüsünde Yeni Anahtar'a tıklayın .
    b. Yeni tuşa sağ tıklayın ve kısayol menüsünde Yeniden Adlandır seçeneğine tıklayın . c. Anahtar adını, uygulamanızın adı olacak şekilde düzenleyin; myapp.exe , bu örnekte.
  5. Myapp.exe klasörüne sağ tıklayın ve kısayol menüsünde Yeni Dize Değeri'ne tıklayın .
  6. Yeni dize değerine sağ tıklayın ve kısayol menüsünde Yeniden Adlandır'a tıklayın.
  7. Adı olarak değiştirin debugger .
  8. Yeni dize değerine sağ tıklayın ve kısayol menüsünde Değiştir'e tıklayın . Dize Düzenle iletişim kutusu görüntülenir.
  9. Gelen Değer verisi kutusuna türü vsjitdebugger.exe.
  10. Tıklayın Tamam .
  11. Gönderen Sicil menüsünden tıklayın Çık .
  12. Vsjitdebugger.exe dosyasını içeren dizin sistem yolunuzda olmalıdır. Bunu sistem yoluna eklemek için şu adımları izleyin:
    a. Denetim Masası'nı Klasik görünümde açın ve Sistem'e çift ​​tıklayın .
    b. Gelişmiş Sistem Ayarları'na tıklayın .
    c. In Sistem Özellikleri , tıklayın Gelişmiş sekmesini.
    d. On Gelişmiş sekmesini tıklatın ortam değişkenleri .
    e. In Ortam Değişkenleri iletişim kutusunda, altında Sistem değişkenleri seçin Path , ardından Düzen düğmesini.
    f. İçinde Düzenleme Sistemi Değişkeniletişim kutusunda, dizini Değişken değeri kutusuna ekleyin . Listedeki diğer girişlerden ayırmak için noktalı virgül kullanın.
    g. Sistem Değişkenini Düzenle iletişim kutusunu kapatmak için Tamam'a tıklayın . h. Ortam Değişkenleri iletişim kutusunu kapatmak için Tamam'a tıklayın . ben. Sistem Özellikleri iletişim kutusunu kapatmak için Tamam'a tıklayın .

  13. Şimdi, uygulamanızı başlatmak için herhangi bir yöntemi kullanın. Visual Studio, uygulamayı başlatır ve yükler.

Umarım bu, gelecekte başkalarına yardımcı olur!



3

İşlem yoksa, Visual Studio buna eklenemez .

Bununla birlikte, projenizin başlangıç ​​programını, projenizin çıktısından başka bir şey olacak şekilde ayarlayabilirsiniz.


Yapmak istediğim şeyin doğru olup olmadığını zaten araştırdım ve aslında doğru. Durumum normal bir Visual Studio hata ayıklama vakası değil. Visual Studio'da geliştirilmiş bir Excel 2010 şablon projem var ve şablon sayfalarında başlangıç ​​olayları var. Bu şablonu Visual Studio'dan çalıştırıyorum, Excel sayfalarıma bazı veriler ekleyip dosyayı diske kaydediyorum. O zaman, aynı zamanda şablon derlemesine dayanan bu dosyayı açabilmemin tek yolu, onu gezginden açmaktır, bu nedenle bu durumda başlangıç ​​olaylarında hata ayıklayamıyorum ve tabii ki başlangıçta veri bağlama gibi bazı veri işlemem var.
Ucodia

"Yerel kod hata ayıklamasını etkinleştir" seçeneğini işaretlemek gerekebilir (proje özellikleri → Hata AyıklaHata Ayıklayıcıları Etkinleştir ).
Peter Mortensen

3

Bir MessageBox gösterebilir, bu uygulamayı engeller, ardından hata ayıklayıcıyı işleme ekler veya yeniden iliştirirsiniz ve devam etmek için Tamam'ı tıklatırsınız:

MessageBox.Show("Attach process to debugger and click ok!");

bunu Form yapıcısına ekleyebilirsiniz (winforms kullanıyorsanız), böylece bu, bileşenlerin başlatılması dışında her şeyden önce yürütülür:

public MainForm()
{
    InitializeComponent();
    MessageBox.Show("Attach process to debugger and click ok!");
}

Hata ayıklamayı bitirdiğinizde, bu satırı yorumlayın.


3

Hata ayıklayıcıyı kodunuzdan başlatabilirsiniz.

public static void Main(string[] args)
{
  System.Diagnostics.Debugger.Launch();
}

Ancak başvurunuzu göndermeden önce bu satırı kaldırmayın. Belki emin olmak için derleyici bayraklarını kullanmak istersiniz:

    public static void Main(string[] args)
    {
      #if debug
      System.Diagnostics.Debugger.Launch();
      #endif
    }

2
Bu, başvurunuzu başlatmak için bazı harici işlemlerin beklediğiniz tüm durumlar için kabul edilen cevap olmalıdır.
TravelingFox

2

Birçok kişiye uyabilecek küçük bir çözüm.

  • exe'nin çalıştıracağı kodun ilk satırına bu komutu ekleyin

    System.Threading.Thread.Sleep (20000)

Bu, herhangi bir şeyi işlemeye başlamadan önce exe'yi 20 saniye uyutur. Ardından, ctrl + alt + p ile hızlı bir şekilde gerçekleştirilebilen işleme eklemek için 20 saniyeniz var, ardından işlemi bulun ve eklemek için girin.

Pek bir cevap değil ama benim için bir tedavi oldu: -)


Kaynak koduna sahip olduğum "C" ile yazılmış bir CGI'da hata ayıklamak zorunda kaldım. Arka plan sürecine zaman eklemek için basit ve kolay bir çözümdüm.
Joël Hecht
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.