Как включить макросы C ++ WARN & TRACE в BDS2006 - PullRequest
2 голосов
/ 07 апреля 2010

Я пытаюсь выяснить, как включить (и использовать) макросы Borland WARN & TRACE.

Моей отправной точкой была эта ссылка: http://bcbjournal.org/articles/vol2/9809/Debugging_with_diagnostic_macros.htm?PHPSESSID=37bf58851bfeb5c199d1af31d7b2e7ff

Однако это похоже на BCB5, а не на Borland Developer Studio 2006 года.

  • Я установил два определения (__WARN & __TRACE)
  • Я включил файл .h ()
  • Я добавил несколько макросов, и все отлично компилируется и ссылки.

Но когда я запускаю приложение (в режиме отладки), файл отладочной информации не создается.

Что мне здесь не хватает?

1 Ответ

1 голос
/ 26 июля 2010

Я тоже исследовал эту функцию отладки TRACE, так как использую набор инструментов Borland. Несколько вещей, которые я заметил, когда я это выяснил.

  • Убедитесь, что __TRACE и __WARN определены до #include <checks.h>. Вы также можете удалить #define __TRACE и __WARN из модуля перевода и вместо этого передать его в bcc32, используя во время компиляции параметр -D macroname .
  • _GetDiagGroupDef не разрешен для BDS2006. Похоже, что набор инструментов компилятора, который поставляется с BDS2006 и более поздними версиями, по-видимому, пропускает некоторые реализации функций и классов, которые использует check.h, в частности _GetDiagGroupDef. Я получаю неразрешенные ссылки от компоновщика при компиляции тестового примера, который использует check.h. Этого не происходит, когда я использую BCB 5.5.1. Используя grep / findstr, кажется, что check.cpp компилируется в библиотеку времени выполнения BCB5.5.1, но отсутствует в цепочке инструментов BDS2006. Я удивлен, что вы не столкнулись с той же проблемой, возможно, я не установил некоторые компоненты. Я нашел копию check.cpp из старого набора инструментов Borland здесь . Компиляция и компоновка, которые должны исправить неразрешенные ошибки.
  • В руководстве говорится, что outdbg1.txt - это временный файл, и он отображается только в Borland IDE - чтобы этот файл действительно существовал, его необходимо сохранить. Это говорит о том, что их макросы TRACE / WARN на самом деле не выводят файл отладки. Вероятно, он выводит отладочную информацию в поток stderr.

Если это действительно так, то перенаправление потока stderr в файл должно дать то, что вы ищете. Скомпилируйте пример программы, затем запустите ее примерно так:

myprogram.exe 2> outdbg1.txt

В общем, вы, вероятно, захотите найти альтернативные инструменты, которые помогут вам в процессе отладки. К сожалению, представленные здесь макросы TRACE & WARN плохо документированы, и для более поздних версий набора инструментов borland / embarcadero он даже не работает должным образом, потому что в rtl не собраны необходимые функции / классы. Поэтому стоит изучить следующее:

  1. API OutputDebugString. Это дает преимущество в том, что любая программа монитора, использующая этот API, может получать строки отладочных сообщений от отлаживаемой программы.
  2. xUnit Testing Framework. Google Test стоит проверить.
  3. и, конечно, ваш стандартный интегрированный отладчик IDE: P
...