Может твердый код исходного кода.NET точка останова отладки?

Вы можете использовать обратные итераторы для итерации через родителей, например:

#include <iostream>
#include <vector>

int main() {
  std::vector<int> parent1{1, 2, 3, 4, 5};
  std::vector<int> parent2{6, 7, 8, 9, 0};

  std::vector<int> child1;
  std::vector<int> child2;

  int cut = 2;
  {
    auto cut1 = std::begin(parent1); // set cut1 to element 1
    auto cut2 = parent2.rbegin(); // set cut2 to element 0 (reverse)
    std::advance(cut1, cut); // iterate cut1 to element 3
    std::advance(cut2, cut); // iterate cut2 to element 8 (reverse)

    child1.insert(child1.end(), cut1, std::end(parent1)); // copy elements 3, 4 ,5
    child1.insert(child1.end(), parent2.rbegin(), cut2); // copy elements 0, 9 (reverse)
  }
  {
    auto cut1 = parent1.rbegin(); // set cut1 to element 5 (reverse)
    auto cut2 = parent2.begin(); // set cut2 to element 6
    std::advance(cut1, parent1.size() - cut); // iterate cut1 to element 2 (reverse)
    std::advance(cut2, parent2.size() - cut); // iterate cut2 to element 9

    child2.insert(child2.end(), cut1, parent1.rend()); // copy elements 2, 1 (reverse)
    child2.insert(child2.end(), parent2.begin(), cut2); // copy elements 6, 7, 8
  }
  for (const auto& el : child1) {
    std::cout << el << " ";
  }
  std::cout << std::endl;
  for (const auto& el : child2) {
    std::cout << el << " ";
  }
  std::cout << std::endl;
  return 0;
}

С C ++ 14 вы можете использовать std::rbegin(parent2) вместо parent2.rbegin().

70
задан Mogsdad 17 August 2015 в 17:23
поделиться

5 ответов

Вы, вероятно, после чего-то вроде этого:

if(System.Diagnostics.Debugger.IsAttached)
  System.Diagnostics.Debugger.Break();

, Конечно, который будет все еще скомпилирован в Сборке конечных версий. Если Вы хотите, чтобы он вел себя больше как объект Отладки, где код просто не существует в Сборке конечных версий, то Вы могли сделать что-то вроде этого:

    // Conditional("Debug") means that calls to DebugBreak will only be
    // compiled when Debug is defined. DebugBreak will still be compiled
    // even in release mode, but the #if eliminates the code within it.
    // DebuggerHidden is so that, when the break happens, the call stack
    // is at the caller rather than inside of DebugBreak.
    [DebuggerHidden]
    [Conditional("DEBUG")] 
    void DebugBreak()
    {
        if(System.Diagnostics.Debugger.IsAttached)
            System.Diagnostics.Debugger.Break();
    }

Тогда добавляют вызов к нему в Вашем коде.

127
ответ дан ctacke 24 November 2019 в 13:19
поделиться

System.Diagnostics.Debugger.Break?

12
ответ дан Kenny Evitt 24 November 2019 в 13:19
поделиться

Я столкнулся с ситуацией однажды, где это не работало

System.Diagnostics.Debugger.Break();

, но это сделало

System.Diagnostics.Debugger.Launch();
9
ответ дан CheGueVerra 24 November 2019 в 13:19
поделиться

Как насчет того, чтобы просто настроить Visual Studio для появления с отладчиком, даже если Вы глотаете его?

Делают это:

  • Переходят к Отладке-> Исключения...
  • Находят правильное исключение или добавляют его, если это будет Ваше собственное
  • Проверка флажок "Thrown" для исключения

, то Это остановит Visual Studio на местоположении, что исключение выдается, не просто, если это не обрабатывается.

Вы видите больше информации здесь .

4
ответ дан angry person 24 November 2019 в 13:19
поделиться

Хороший прием, который я нашел, помещает Отладчик. Повреждение () в ctor Вашего Исключения.

4
ответ дан Jonathan C Dickinson 24 November 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: