2017-01-18 6 views
1

я очень новичок в LLVM, и это мой первый раз, чтобы написатьLLVM как получить callsite имя файла и номер строки

C++ Мне нужно найти несколько информацию функцию, связанную с LLVM CallSite, однако, я проверил исходный код здесь: LLVM CallSite Source Code

до сих пор не знаю, где можно получить вызова имя файла сайта (., например, CallSite в example.c файле) вызова строки сайта номер (например, в строке 18 в. целая программа)

Вы знаете, как я могу позвонить имя файла сайта и номер строки?

ответ

2

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

  1. Вам необходимо получить базовое вызываемое значение, которое является функцией.
  2. Затем вам нужно получить отладочную информацию, прикрепленную к этой функции.
  3. Отладочная информация должна содержать все, что вам нужно.

Вот код, который должен делать эту работу (я не запустить его, хотя):

CallSite cs = ...; 
if (!cs.isCall() && !cs.isInvoke()) { 
    break; 
} 

Function *calledFunction = dyn_cast<Function>(cs.getCalledValue()); 
if (!calledFunction) { 
    break; 
} 

MDNode *metadata = calledFunction->getMetadata(0); 
if (!metadata) { 
    break; 
} 

DILocation *debugLocation = dyn_cast<DILocation>(metadata); 
if (debugLocation) { 
    debugLocation->getFilename(); 
    debugLocation->getLine(); 
} 

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

+0

Он хочет, чтобы место вызова, а не вызываемый. –

+0

Хм, разве это не просто местоположение CallSite? – AlexDenisov

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

  • Нет связанных вопросов^_^