當您在同一臺計算機上的可執行文件上執行通常的gdb會話時,可以給出運行命令,它將再次啓動該程序。你如何開始在gdb中使用'target remote'重新運行程序?
當您在嵌入式系統上運行gdb時,與命令target localhost:3210'一樣,如何在不退出並重新啓動gdb會話的情況下重新啓動程序?
當您在同一臺計算機上的可執行文件上執行通常的gdb會話時,可以給出運行命令,它將再次啓動該程序。你如何開始在gdb中使用'target remote'重新運行程序?
當您在嵌入式系統上運行gdb時,與命令target localhost:3210'一樣,如何在不退出並重新啓動gdb會話的情況下重新啓動程序?
不幸的是,我不知道重新啓動應用程序並仍然保持會話的方法。解決方法是將PC設置回程序的入口點。您可以通過調用做到這一點:
jump function
或
set $pc=address
。
如果您將參數消減爲main
,則可能需要重新設置它們。
編輯:
有幾個與可能導致問題的上述方法需要注意的地方。
所以,使用跳轉與重新啓動程序不是一回事。
假設你在嵌入式系統上運行gdbserver。
你可以要求它重新啓動,而不是與target extended-remote
有用,目前沒有關於目標擴展模式。謝謝。 – sstock 2009-07-31 01:09:14
「跳_start」退出你的程序是通常的方式。
如果您正在運行規律GDB你可以鍵入「運行」快捷「R」和gdb詢問您是否要重新啓動的程序
對我的方法描述在21.2 Sample GDB session startup的作品很棒。當我在「(gdb)」提示後輸入monitor reset halt
時,目標硬件將重置,我可以用c
(= continue)重新啓動應用程序。
在運行之間可以省略load
命令,因爲不需要一次又一次地刷新程序。
步驟一步過程
遠程:
# pwd contains cross-compiled ./myexec
gdbserver --multi :1234
本地:
# pwd also contains the same cross-compiled ./myexec
gdb -ex 'target extended-remote 192.168.0.1:1234' \
-ex 'set remote exec-file ./myexec' \
--args ./myexec arg1 arg2
(gdb) r
[Inferior 1 (process 1234) exited normally]
(gdb) r
[Inferior 1 (process 1235) exited normally]
(gdb) monitor exit
測試在Ubuntu 14.04。
也可以到CLI參數傳遞給該程序爲:
gdbserver --multi :1234 ./myexec arg1 arg2
和./myexec
部分消除了set remote exec-file ./myexec
的需要,但這種有以下煩惱:
show args
上顯示,並且在重新啓動後不會持續顯示:https://sourceware.org/bugzilla/show_bug.cgi?id=21980通行證環境變量和更改工作目錄,而不重新啓動:How to modify the environment variables and working directory of gdbserver --multi without restarting it?
在EFM32快樂壁虎沒有任何的建議都爲我工作,所以這裏是我從文檔上集成GDB到Eclipse環境中學會了。
(gdb) mon reset 0
(gdb) continue
(gdb) continue
這使我處於從IDE打到重置時的狀態。
對於一個簡單的非多線程應用程序,跳轉正是我所需要的。 – wulfgarpro 2016-06-29 01:56:14