Как поместить точку останова в каждую функцию .cpp файла?

Проблема не связана с R или RStudio.

Объяснение проблемы:

Проблема связана с процессом создания и преобразования встроенных изображений в документы Microsoft Word в Mac OS X и с тем, как документ затем обрабатывается Microsoft Word в Windows .

Почему? По сути, PDF является родным компонентом системы рисования Apple Quartz. Внутренняя модель обработки изображений Mac OS X Quartz хорошо коррелирует с графиком объектов PDF, что упрощает отображение и управление встроенными изображениями в формате PDF.

Увы, это не относится к операционной системе Windows. [ Это не критика, а просто наблюдение. ] Механизм PDF не включен в Windows, это дополнение. Таким образом, документ Mac OS X Word не будет корректно отображаться в Microsoft Word для Windows. В дополнение к этому, по-видимому, нет никакой полезной возможности иметь OLE-ссылку на PDF.

Пример:

В Mac OS X можно просто перетащить изображение PDF в текстовый документ. Отображаемое изображение будет отображаться как:

enter image description here

сейчас, если мы перейдем на ПК с Windows 10 и откроем документ, который увидим: [ 1124]

enter image description here

Обходной путь:

Рекомендуемое обходное решение - сохранить изображения в формате .png или .jpg и вставить эти в слово документ.

library(ggplot2)
library(cowplot)
p <- qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = 0.5)
save_plot("plot.pdf",p)
save_plot("plot.png",p)
save_plot("plot.jpg",p)

Результат:

Microsoft Word в Windows 10

enter image description here

Запрошенное дополнение - EPS

Другой рассматриваемый вариант - использовать

ggsave("plot.eps", p, device=cairo_ps, fallback_resolution = 1200)

, это действительно работает, однако на визуализированных изображениях в Windows 10 были замечены полоски.

Неявное преобразование EPS в EMF из-за безопасности Вектор атаки:

По-видимому, страты связаны с неявным диалогом, в котором Word преобразует изображения EPS в формат EMF из-за ограничений безопасности.

[Тысяча сто тридцать два] https://support.office.com/en-us/article/support-for-eps-images-has-been-turned-off-in-office-a069d664-4bcf-415e-a1b5- cbb0c334a840

Таким образом, вы можете вставить изображение EPS, но оно, похоже, преобразуется в EMF, чтобы блокировать векторы атаки встроенного сценария EPS.

Пример:

enter image description here

14
задан Constantin 1 October 2008 в 22:41
поделиться

6 ответов

Вот быстрая реализация идеи ИНФОРМАЦИИ 1800 года:

Sub TemporaryMacro()
    DTE.ActiveDocument.Selection.StartOfDocument()
    Dim returnValue As vsIncrementalSearchResult
    While True
        DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.StartForward()
        returnValue = DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.AppendCharAndSearch(AscW("{"))
        DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.Exit()
        If Not (returnValue = vsIncrementalSearchResult.vsIncrementalSearchResultFound) Then
            Return
        End If
        DTE.ExecuteCommand("Debug.ToggleBreakpoint")
        DTE.ExecuteCommand("Edit.GotoBrace")
        DTE.ActiveDocument.Selection.CharRight()
    End While
End Sub
5
ответ дан 1 December 2019 в 09:34
поделиться

Поместите это наверху файла:

#define WANT_BREAK_IN_EVERY_FUNCTION

#ifdef WANT_BREAK_IN_EVERY_FUNCTION
#define DEBUG_BREAK DebugBreak();
#else
#define DEBUG_BREAK 
#endif

затем вставляют DEBUG_BREAK в начале каждой функции, как это:

void function1()
{
    DEBUG_BREAK
    // the rest of the function
}

void function2()
{
    DEBUG_BREAK
    // the rest of the function
}

, Когда Вы больше не захотите повреждения отладки, прокомментируйте строку

// #define WANT_BREAK_IN_EVERY_FUNCTION

наверху файла.

0
ответ дан 1 December 2019 в 09:34
поделиться

Я не знаю то, что DTE функционирует для использования, но Вы могли очень просто записать макрос, который мог в значительной степени сделать это:

  1. Переходят к вершине файла
  2. ctrl - сдвига - R (начните записывать)
  3. ctrl - я (возрастающий поиск)
  4. {(ищут первое {символ).
  5. F9 (точка останова набора)
  6. ctrl-] (переходят к соответствию} символ)
  7. ctrl - сдвиг - R (прекращают записывать)

Теперь просто работает, это много раз (ctrl - неоднократно смещают P), пока Вы не достигаете конца файла.

, Если у Вас есть пространства имен, затем изменитесь 4.кому:

  1. ((поиск" (" в начале функционального определения)
  2. esc (останавливают возрастающий поиск)
  3. ctrl - я (возрастающий поиск снова)
  4. {(запускаются тела функции)

Такого рода вещь может быть бесконечно изменена для удовлетворения кодовой базе

2
ответ дан 1 December 2019 в 09:34
поделиться

Вот то, как что-то подобное могло быть достигнуто в WinDbg:

bm mymodule!CSpam::*

Это помещает точку останова в каждый метод класса (или пространство имен) CSpam в модуле mymodule.

я все еще ищу что-нибудь похожее к этой функциональности в Visual Studio.

1
ответ дан 1 December 2019 в 09:34
поделиться

Как метод Константина ... Это похоже на территорию windbg.

Поскольку у вас есть cpp (даже если вы не могли написать сценарий, чтобы обойтись), он должен быть Нет проблем использовать logger часть инструментов отладки для Windows ... это очень удобный инструмент, позор, что немногие люди его используют.

logger отладки C / COM / C ++ легко, с богатой символьной информацией , хуки / профилирование / гибкое оснащение;

Один из способов активировать Logger - запустить CDB или WinDbg и присоединиться к целевому приложению пользовательского режима, как обычно. Затем используйте команду расширения! Logexts.logi или! Logexts.loge. Это вставит код в текущую точку останова, который перейдет к подпрограмме, которая загружает и инициализирует Logexts.dll в процессе целевого приложения. Это называется «встраиванием Logger в целевое приложение».

2
ответ дан 1 December 2019 в 09:34
поделиться

(Это не совсем то, о чем вы просите, но почти :)

Вы можете поставить точку останова на каждую функцию-член класса в Visual Studio, вызвав Диалог новой точки останова и ввод:

CMyClass::*

См. http://blogs.msdn.com/b/habibh/archive/2009/09/10/class-breakpoint-how-to-set-a- точка останова на ac-class-in-the-visual-studio-debugger.aspx для получения дополнительных сведений.

18
ответ дан 1 December 2019 в 09:34
поделиться
Другие вопросы по тегам:

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