Existe um bom método geral para depurar macros C ++?
Pergunta
Em geral, eu ocasionalmente têm uma cadeia de macros aninhadas com alguns elementos condicionais de pré-processamento em suas definições. Estes podem ser doloroso para depuração, uma vez que é difícil ver diretamente o código real que está sendo executado.
Um tempo atrás eu me lembro vagamente encontrar uma bandeira compilador (gcc) para expandi-los, mas eu tinha problemas para obter isso funcione na prática.
Solução
gcc -E vontade de saída da fonte pré-processado na saída padrão.
Outras dicas
Para usuários MSVC, você pode botão direito do mouse sobre o arquivo / projeto, exibir as configurações e alterar as propriedades do arquivo para a saída pré-processado fonte (que normalmente no diretório obj).
Isto pode não ser aplicável em sua situação, mas macros realmente dificultar a depuração e, muitas vezes são usado em demasia e evitável.
Você pode substituí-los com funções embutidas ou de outra forma se livrar deles todos juntos?
Você provavelmente deve começar a afastar formar Macros e começar a usar em linha e modelos.
Macros são uma ferramenta de idade, a ferramenta certa, às vezes. Como último recurso, lembre-se printf é seu amigo (e realmente printf não é que um amigo ruim quando o seu fazendo coisas multithreaded)
depuração o dissasembly com os símbolos carregado.
gcc -save-temps vai escrever um .i (ou arquivo .ii para C ++), que é a saída do pré-processador C, antes que seja entregue para o compilador. Isso muitas vezes pode ser esclarecedor.
GCC e compiladores compatíveis usar a opção -E para emitir a fonte pré-processado para fora padrão.
gcc -E foo.cpp
Sun Studio também suporta esta bandeira:
CC -E foo.cpp
Mas o melhor mesmo é -xdumpmacros. Você pode encontrar mais informações em docs Suns'.