2013-07-07 27 views
2

的便攜式相當於我已經寫在Windows上使用__debugbreak()一些代碼,我想支持其他的編譯器,所以我在尋找建立這個功能(鐺和GCC)的更便攜版本。__debugbreak

我現在拒絕使用內聯彙編程序,因爲它沒有提供指定調試中斷的目標無關手段。我也看過__builtin_trap(),但顯然它並沒有真正允許例如步入/之後的步驟和那種事情。我也看過this question,但接受的答案實際上並沒有指定我正在尋找的位 - 位於「...」中的位。

我也看到了一些鏘補丁對支持這一點,但顯然仍鏘拒絕含有__debugbreak()代碼。

有什麼建議嗎?

回答

2

我可以確認__builtin_trap()不會給你正確的斷點類型以便在gcc中繼續。它給出了一個illegal opcode trap,不允許代碼繼續在所有 - 如果你在gdb做next,它只是一個SIGILL退出,這是不是如果你真的希望能夠繼續特別有益。

就我所見,唯一的解決方案是使用內聯彙編器。我試過在「hello,world」程序中使用int 3,雖然gdb沒有識別斷點,但它在指令處停止了,並且在休息之後我能夠繼續。

#include <stdio.h> 

#define BREAKPOINT \ 
    asm("int $3") 

int main() 
{ 

    BREAKPOINT; 

    printf("Hello, world!\n"); 
    return 0; 
} 

(編譯時GCC和鐺在Linux x86_64的,32位和64位模式)

我的確發現這個博客: http://mainisusuallyafunction.blogspot.co.uk/2012/01/embedding-gdb-breakpoints-in-c-source.html

但它需要一個腳本來分析可執行文件文件(並且可能無法在Windows下運行)。

相關問題