2014-02-11 1 views
0

Как проверить, был ли установлен флаг -g (опция debug info), с моего llvm pass, который я пишу? Я просто пытаюсь выяснить, есть ли способ получить параметры командной строки через мой проход, включая -g.Как я могу проверить, был ли установлен флаг -g (опция debug info), от llvm pass

ответ

1

Когда Clang генерирует LLVM IR, он напрямую не записывает, какие параметры командной строки были использованы. Однако вы можете легко проверить, включена ли информация об отладке, проверяя наличие указанной отладочной информации.

Самый простой подход, который я могу вспомнить, проверка на наличие узла !llvm.dbg.cu имени метаданных:

bool wasCompiledWithDebugInfo(const Module& M) { 
    return M.getNamedMetadata("llvm.dbg.cu") != NULL; 
} 

Это должно работать в большинстве случаев Там один улов - один Module на самом деле может состоять из нескольких компиляцией единицы связаны друг с другом, некоторые скомпилированы с информацией об отладке, а некоторые нет. Если вас это не волнует, тогда вы получили свой ответ.

Если вам все равно, вам нужно более конкретно узнать, чего вы действительно пытаетесь достичь. Например, если вам интересно, была ли скомпилирована определенная функция с отладочной информацией, вы должны проверить эту функцию напрямую (на searching for the DISubprogram metadata describing it) вместо того, чтобы спрашивать об элементах компиляции.

+0

Спасибо дуб! Это то, о чем я думал. Я просто пытался выяснить, есть ли способ получить параметры командной строки через мой проход, включая -g. Это приятно, потому что вы также указываете мне на один из моих старых ответов в переполнении стека :) – Kyriakos

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