2013-12-11 4 views
2

Есть ли способ распечатать в текстовом файле код, который он выполняет для целей отладки?C++ print выполненный код

, например:

if (i == 1) 
{ 
a = true; 
} 
else 
{ 
a = false 
} 

Так что, когда я = 1 мы выводим в текстовый файл:

if (i == 1) 
{ 
a = true; 
} 
else 

и когда я = 1 мы выводим в текстовый файл

if (i == 1) 
else 
{ 
a = false 
} 

Я не говорю, что это хорошая практика. Я знаю, что gdb и другие инструменты намного лучше отлаживают код, поэтому, пожалуйста, не сердитесь, если считаете, что это ужасная идея. Мне просто интересно, можно ли это сделать. Это было бы похоже на добавление printf после каждой строки, поэтому мы будем печатать только строки, которые выполняются. Ничего, ничего, ничего подобного.

+0

Какой отладчик/компилятор вы используете? Если у вас есть что-то вроде визуальной студии, вы можете скомпилировать информацию об отладке, чтобы получить функциональность, подобную той, которую вы хотите. –

+0

Возможно, вы сможете сделать это с помощью скрипта, запускающего gdb. Из компилятора это невозможно. – Devolus

+0

Невозможно реалистично; для любой «реальной» программы результатом будет Giga-, если не терабайт. – MSalters

ответ

-1

Для целей отладки я бы сказал, что это не практично. Да, вы можете делать printf до/после каждой строки исполнения, но это просто закроет вашу программу. Кроме того, если вы говорите об отладке выполнения циклов, вы в конечном итоге печатаете кучу мусора снова и снова, и вам придется искать навсегда найти потенциальные ошибки. Короче говоря, используйте контрольные точки.

Однако, с теоретической точки зрения, можно создать program that outputs itself. Это немного отличается от того, что вы хотите, потому что вам нужны только части вашей программы, но я думаю, что с небольшими изменениями это можно сделать.

+0

Куин не имеет к этому никакого отношения. –

+0

Я думал, что исходное сообщение задавалось вопросом, можете ли вы более или менее сделать сам вывод программы? –

+3

"более или менее" - здесь. Он печатает строки программы по мере ее выполнения. –

0

Я думаю, что вы хотите, не имеет ничего общего с отладкой в ​​первую очередь, но с модульным тестированием и тестовым покрытием:

Вам нужно создавать модульные тесты (например, с помощью googletest) для кода и скомпилируйте его с включенными опциями покрытия кода (например, --coverage для GCC). Затем вы можете использовать инструмент для создания отчета о покрытии (например, lcov/genhtml для упомянутой инструментальной цепочки).

Модульные тесты будут управлять входом для ваших случаев (i = 1/0).

Смежные вопросы