1. 程式人生 > >在Emacs除錯JAVA程式,使用GUD模式

在Emacs除錯JAVA程式,使用GUD模式

很早以前就配置了在GUD模式下條用GDB除錯C/C++程式。 GUD其實是支援非常多的偵錯程式的,但是功能只有GDB(即除錯C/C++)的時候比較強大。 GDB的設定可以參考:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 以下的配置是除錯JAVA程式,用的也是GUD模式,是呼叫JDB實現的。 而非JDEE或者其他為Emacs製作的IDE環境(我嫌那種模式太煩了,而且我沒辦法在win和linux共享配置)。 在除錯之前,編譯的使用要加-g 引數,開啟除錯模式 例項:javac test.java -g 要開始除錯需要用 M-x jdb 然後輸入(XXX為要除錯的class檔案,不用帶字尾名) jdb XXX
這樣就可以進入jdb-mode了 可以通過指令進行操作 gud-run 開始執行程式(直到遇到斷點) gud-cont 繼續執行程式(第一次要使用gud-run 之後要使用 gud-cont) gud-print 檢視物件內容,和jdb的dump不太一樣
gud-break 設定斷點
gud-remove 清除斷點 gud-next 下一行(跳過函式)
gud-step 步入(進入函式)
gud-finish 跳出函式
它預設有一些快捷鍵但是都太煩了,我都該成自己的了,下面有配置 JDB和GDB不太一樣,沒有提供gud-go的現成方法,但是我自己寫了個函式吧gud-run和gud-cont 統一了一下。
(defun jdb-run-cont ()
  "run/continue java program."
  (interactive)
  (save-excursion
    (if jdb-need-run
     (progn
         (gud-run nil)
         (setq need-run nil))
     (gud-cont nil)
    ))
)


在進入jdb模式的時候設定了一個jdb-need-run的全域性變數
(add-hook 'jdb-mode-hook '(lambda ()
    (setq jdb-need-run t)                  
    (global-set-key [(f4)]   'gud-kill)
    (global-set-key [(f5)]   'jdb-run-cont)
    (global-set-key [(f7)]   'gud-print)
    (global-set-key [(f8)]   'gud-remove)
    (global-set-key [(f9)]   'gud-break)
    (global-set-key [(f10)]  'gud-step)
    (global-set-key [(f11)]  'gud-next)
    (global-set-key [(f12)]  'gud-finish)

    (split-window-horizontally) 
    (tabbar-backward-group)
))


這裡有一個gud-kill也是一個自定義的函式,用於刪掉debug的程序,(這個和GDB模式下的一樣)
(defun gud-kill ()
  "Kill  process."
  (interactive)
  (with-current-buffer gud-comint-buffer (comint-skip-input))
  (kill-process (get-buffer-process gud-comint-buffer)))


還有幾個問題,希望以後有時間能解決它 1、下斷點的時候沒法想在GDB模式下載fring側邊欄顯示一個小紅點的表示 2、因為沒有側邊欄的小紅點,就暫時沒有現成的方法可以把設定斷點和清楚斷點綁在同一個快捷鍵上(GDB的實現是通過判斷側邊欄有沒有點陣圖實現的) 3、沒有一個好的可以實時更新的watch視窗 4、因為gud.el是內建在Emacs程式裡面的,所以沒辦法改原始碼,暫時不知道要怎麼把jdb dump命令也繫結到gud命令上 Emacs 就是一個坑,一個永遠挖不完坑。。。。。

相關推薦

Emacs除錯JAVA程式使用GUD模式

很早以前就配置了在GUD模式下條用GDB除錯C/C++程式。 GUD其實是支援非常多的偵錯程式的,但是功能只有GDB(即除錯C/C++)的時候比較強大。 GDB的設定可以參考:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 以下的配置是除錯JAVA程式,用的也是GUD模式,是呼

eclipse除錯java程式的九個技巧

九個技巧: 邏輯結構 條件debug 異常斷點 單步過濾 跳到幀 Inspect expressions display 遠端debug     最早開始用eclipse的debug的時候,只會F5 F6 F7 F8,甚

設計一個 Java 程式自定義異常類從命令列(鍵盤)輸入一個字串如果該字串值為“XYZ”。。。

設計一個 Java 程式,自定義異常類,從命令列(鍵盤)輸入一個字串,如果該字串值為“XYZ”,則丟擲一個異常資訊“This is a XYZ”,如果從命令列輸入 ABC,則沒有丟擲異常。(只有 XYZ 和 ABC 兩種輸入)。 class xyz {   public void test(S

java零碎要點012---linux Centos下編譯、執行、除錯java程式

   JAVA技術交流QQ群:170933152  有時候要除錯一些東西,適不適用Linux,還是需要在Linux上弄啊 Linux上步驟: 安裝jdk 安裝以後vi Test.java 然後編寫程式: import java.io.File;

設計一個包含一個interface三個class的Java 程式用於完成陣列排序排序任務。其中interface中包含一個sort() 方法。第一個class使用氣泡排序法實現interface的

題目:設計一個包含一個interface,三個class的Java 程式,用於完成陣列排序排序任務。其中interface中包含一個sort() 方法。第一個class使用氣泡排序法實現interface的sort()方法;第二個class使用選擇排序法實現interface的sort()方法;

IDA附加除錯apk程式並修改記憶體編寫IDA指令碼程式把修改後的dex檔案dump到本地

我的測試環境:模擬器 Android 4.2 armeavi-v7a   1.IDA附加除錯apk程式 找到IDA所在目錄,在dbgsrv資料夾下找到程式android_server 在這裡按住“Shift +滑鼠右鍵”,開啟控制檯 把程式android_server

linux 部署java程式使其成為服務

 一個小專案,linux環境下部署,記錄一下: 啟動指令碼comm_mq如下: #! /bin/sh #chkconfig:345 61 61 #description:test2Run description #-----------------------------

教你打包Java程式jar轉exe隨處可跑

發現很多人問如何把Jar轉成exe程式。可能是想雙擊執行和隨處執行。其實這個並不難,我就簡單總結幾種方法,供大家參考,關鍵還是要知其所以然。 Java程式的執行不可能脫離JRE,不管你是Jar包還是exe程式。這點你必須瞭解。那麼在沒有JRE的

Eclipse設定條件斷點除錯java程式

程式設計人員除錯程式碼經常使用到斷點,但很多人可能沒有使用過條件斷點,那麼什麼時候會需要用到條件斷點呢? 1、for迴圈比較次數比較多,想讓for迴圈停在指定的第幾次迴圈處 2、想在大家同時執行的程式碼環境上自己除錯,還不影響別人的訪問 這時候就可以選擇使用條件斷點了,條件斷點,顧名思義

編寫Java程式製作萬年曆。

package com.nfsbbs.wang; import java.util.Calendar; import java.util.Date; import java.util.Gregori

使用jvisualvm監控JAVA程式注意對程式效能的影響

      最近在使用阿里的Dubbo【http://code.alibabatech.com/wiki/display/dubbo/Home-zh】做一個實時分析功能,為了提高效能,對程式進行了很多的優化工作,在此過程中JDK中的jvisualvm的確功勞不小,但是也有讓

通過python啟動java程式挺方便的分享下。

最近部署了java程式,剛開始用shell來啟動,啟動過程不友好也不方便,也沒有守護程序。今年在整理資料的時候,發現了珍藏一套啟動指令碼。 挺方便的。記錄下。以免忘記 這是我的java程式結構 一個jar檔案,一個config配置檔案 一個lib依賴包

不使用left-join等多表關聯查詢只用單表查詢和Java程式簡便實現“多表查詢”效果

上次我們提到,不使用left-loin關聯查詢,可能是為了提高效率或者配置快取,也可以簡化一下sql語句的編寫。只寫單表查詢,sql真得太簡單了。問題是,查詢多個表的資料還是非常需要的。   因此,存在這麼一個強烈的需求:查詢2個集合,怎麼合併2個集合中的資料為1個集合,且資料關聯要正確。

如何使用加多寶(jdb)在linux下除錯Java程式

畢業時寫了一段時間的C,那時候除錯使用gdb,後來轉了java,當時就想java程式怎麼除錯,找了一下,果然,那就是jdk自帶的jdb windows裡是這樣的 Linux下是這樣的 一般我在linux下來除錯Java程式  好,那麼,問題來了,這玩意怎麼用?有好幾種玩法 第一種玩

命令列執行java程式將控制檯日誌儲存到指定檔案

有個程式。命令列啟動命令為 java -verbose sample.DesktopApp在控制檯看到列印日誌。 將日誌按照日期儲存到指定檔案中,以備查驗。關鍵點在於 2>&1 ,把控制檯異常重定向到標準輸出中。完整批處理如下: #!/bin/bash

Java狀態模式和策略模式的區別

Java開發者,要想恰當的使用狀態模式和策略模式,必須清楚的理解它們之間的區別。雖然狀態模式和策略模式擁有相似的結構,雖然它們都基於SOLID設計原則中的O(開閉原則),但是,它們的意圖是完全不同的。 策略模式通過封裝一組相關演算法,為Client提供執行時的靈活性。Cl

除錯Android程式不使用模擬器無需資料線真機除錯的方法

最近學習Android,在除錯程式的時候經常遇到模擬器啟動卡死,用數線連線手機有時候會不匹配,也會出現與程式本身無關的錯誤。所以,找到一個既不用模擬器,也無需資料線連線的解決方法,可以通過TCP/IP的方法來進行,也就是ADB通過網路來連線裝置,無需資料線。

編寫一個Java程式將一個二維陣列轉置後輸出

編寫一個程式,講一個3*3的陣列進行轉置 如 程式如下: import java.util.Arrays; public class array { public static void main(String[] args) { int[][] a1={

JLINK和ADS1.2配合除錯下載程式及JTAG不能識別CPU核解決辦法

   a: 最近在搞NXP的晶片,想往晶片裡面下載程式。一開始想直接用JLINK下載,試了下,不行(實際可行的,可能沒配置正確)。後來直接在ADS1.2下debug,把JLINK驅動載入進去,在載入驅動的時候config好,直接debug就能將程式下載flash。折騰了

用eclipse遠端除錯Java程式

最近用Java做專案時一個功能在本機除錯好好的,一部署到伺服器上就不行了,百思不得其解,於是請教老大。 “遠端debug一下”,老大雲淡風輕。 “程式碼部署到伺服器上了還能遠端debug?”,而我一臉懵逼。 老大稍作鼓搗,果然遠端除錯上了!