如何列印我正在執行的指令的地址?例如,讓我們考慮以下主要內容:
int main( void )
{
//printf("......\n");
printf("...Main...\n");
uint32_t nb,delay;
uint16_t result;
DD_SPI_STATUS status;
//Get SPI driver instance
DD_DRIVER_SPI* SPIdrv = DD_SPI_GetDriver(0);
printf("...DD_DRIVER_SPI* SPIdrv = DD_SPI_GetDriver(0)...\n");
DD_IRQ_Init();
printf("...DD_IRQ_Init()...\n");
// Initialize buffers
for (nb = 0; nb < sizeof(TxBuffer); nb )
{
TxBuffer[nb] = nb & 0xFF;
}
// Initialize the SPI driver
SPIdrv->Initialize(SPI_callback);
printf("...SPIdrv->Initialize(SPI_callback)...\n");
// force driver reset
SPIdrv->Control( DD_SPI_MODE_INACTIVE, 0);
printf("...SPIdrv->Control( DD_SPI_MODE_INACTIVE, 0)...\n");
return 0;
}
如何列印指令的地址,SPIdrv-> Control (DD_SPI_MODE_INACTIVE, 0);以便通過查看反匯編代碼我可以立即識別我在哪里?
uj5u.com熱心網友回復:
您可以使用%p格式列印地址:
printf("SPIdrv->Initialize=%p\n", (void*)SPIdrv->Initialize);
沒有標準方法可以將函式的內容列印為指令。但是如果你用谷歌搜索“C 反匯編程式庫”,你會發現一些可以下載的函式。
如果你想main()在你呼叫函式的地方列印地址,我認為這在標準 C 中根本不可能。GCC 有一個擴展,允許你獲取標簽的地址,所以你可以這樣做:
here:
SPIdrv->Initialize(SPI_callback);
printf("Called SPIdrv->Initialize at %p\n", &&here);
uj5u.com熱心網友回復:
這是非標準的,但如果您使用gcc的是擴展名來獲取標簽的地址,那么如果您有:
debug_point:
SPIdrv->Control( DD_SPI_MODE_INACTIVE, 0);
然后&&debug_point將是void *代碼中的那個位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324801.html
標籤:C
上一篇:C函式中return的作用,是否回傳被呼叫變數的值?
下一篇:使用C定義來簡化常量定義?
