Почему я не могу выполнить одношаговый буфер обмена в отладчике VS.NET?

В идеале читатель обновил родную программу C++ до Visual Studio 2008, которая содержит блок OpenClipboard (). Почему бы не попробовать установить точку останова сразу после получения успешного кода возврата от OpenClipboard () и выполнить свой код. Согласно Интернету, он может работать в вашей системе, но, конечно, не в моей, спасибо за попытку.

Поиск в Google, например, ((OpenClipboard 1418 vc6)) находит такие статьи, как «GetClipboardData не работает в отладчике» и «Нет ошибок в VC++ 6, но есть ошибки в VC++ 2005». На данный момент проблема решена прагматично - я просто не могу устанавливать точки останова в таком коде, мне нужно получить информацию и установить точку останова после выполнения операций с буфером обмена. Ошибка 1418: «У потока не открыт буфер обмена», но она работает нормально, пока вы не используете VS.NET, или, как я уже сказал, если вы сохраняете точки останова вне блока clipboard-open-close-block.

Мне было бы лучше знать, в чем именно заключается проблема отладчика VS.NET.

Как человек C++, я лишь смутно осознаю, что вы не должны думать в терминах потоков при работе с dot-Net. Во всяком случае, я не нашел качественного объяснения того, что на самом деле происходит, действительно ли проблема в том, что отладчик dot-Net каким-то образом неуловимо вмешивается в информацию о потоке, когда вы выполняете пошаговую работу через собственный код C++.

Системно: около года, два двухъядерных процессора Xeon, 4 процессора по данным XP-pro. Я только что закончил отладку кода, пошагово пропустив его в vc6 под XP-SP2-32-bit. Итак, я знаю, что с vc6 код был довольно хорош. Однако, когда я тестировал 10-мегабайтный CF_TEXT, у меня были исключения. Я подумал попробовать отладку в более красивой модели исключений XP-x64.

Перекомпилированный с помощью visual-studio-2008, я вообще не смог сделать код пошаговым. OpenClipboard работал, но EnumClipboardFormats () не работал, ничего не работало в пошаговом режиме. Однако, когда я установил точку останова ниже полного блока кода, все работало нормально. И ДА vc2008 сделал точную диагностику повреждения кадра стека вокруг szBuf. В vc2008 есть что любить. Было бы неплохо, если бы это была просто проблема с буфером обмена - не зная, что я буду чувствовать себя вынужденным беспокоиться о переходе через НИЧЕГО, могут ли проблемы с контекстом потока быть из-за dot-Net-debugger.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
766
2

Ответы 2

Я никогда не заглядывал в это, но догадаться достаточно легко:

  1. Буфер обмена - это общий ресурс
  2. Только одно приложение (на рабочем столе) может «владеть» буфером обмена в любой момент времени.
  3. Он принадлежит вашему приложению (после вызова OpenClipboard())
  4. VS этого хочет (вероятно, потому что, помимо прочего, это редактор)
  5. Пока ваше приложение остановлено в точке останова, никакое время ожидания никогда не обнаружит буфер обмена, не принадлежащий вашему приложению.
  6. Веселье следует!

>> VS хочет этого ... редактор) << В этом случае я определенно не буду копировать / вставить, пока пытаюсь сделать одношаговый. Предполагается, что одношаговые операции могут каким-то образом выполняться из неправильного контекста потока.

pngaz 17.09.2008 11:14

VS может потребоваться опрос буфера обмена, чтобы обновить кнопку панели инструментов «Вставить» (и пункт меню «Правка / Вставить») в режиме реального времени.

Roger Lipscombe 07.11.2008 20:06

@ Роджер: это очень вероятно. Стоимость совмещения редактора и отладчика ...

Shog9 07.11.2008 23:48

Не тратьте время на то, чтобы подозревать, что это .NET. Иногда связь между Visual Studio.NET и средой выполнения .NET похожа на ActiveX и ActiveDirectory - она ​​сообщает вам, какой маркетолог был задействован, Visual Studio.NET на самом деле имеет несколько отладчиков. Нативный, скриптовый или управляемый - только последнее действительно связано с .NET. Вы будете использовать собственный отладчик.

Если вы хотите разобраться, я предлагаю подключить OpenClipboard с помощью Microsoft Detours, а затем запустить приложение в отладчике. Вы сможете увидеть, кто борется за буфер обмена.

Я отредактировал описание проблемы, включив в него фразу «после получения успешного кода возврата от OpenClipboard ()». Как указывается в цитируемых статьях-запросах Google, буфер обмена успешно открыт для чтения в потоке, это то, что указывает пальцем на пошаговый механизм.

pngaz 04.10.2008 12:43

Другие вопросы по теме