EDA365电子论坛网

标题: 一键运行实时的修改,让Qt远程调试更简单 [打印本页]

作者: 罗罗诺亚    时间: 2022-9-30 16:53
标题: 一键运行实时的修改,让Qt远程调试更简单
相信各位工程师小伙伴都有这样的体会——当调试自己的Qt程序时,尤其是在调整界面显示和整体布局时,需要频繁地制作镜像烧写到核心板里来测试Qt程序是否完善,这样的操作既费时又费力。8 C; A" @3 s4 B3 Q" t$ z/ }. d
2 d) C/ j- v1 V1 L) Q+ u# e
那么,有没有更快捷的方法呢?今天小编就用OKT3-C开发板来为大家介绍如何快速进行Qt远程调试。话不多说,我们直接切入正题。2 f# G& b9 M  ?  H. Z

. S  X  S1 ]) D7 u9 e0 t2 C7 M2 C一、修改工程配置8 a+ q# u, X* t/ L! _- ]
Step 1:
2 u& Z# B& i- J9 {8 h8 V* e3 A
打开OKT3-C开发板开发环境中的Qt软件,按照以下顺序依次点击:【工具→选项→构建和运行→Debuggers→Add】,选择gdb调试插件路径下的aarch64-linux-gnu-gdb,并命名gdb路径:
  \& R$ K* h( r- n
/ Y( M: S) l$ Z$ T
/home/forlinx/work/lichee/brandy/armv8_toolchain/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/bin/aarch64-linux-gnu-gdb(注:此路径是小编自己环境中的路径,大家自己实际环境前的路径会有所差异)5 Z, v9 h- {3 Y. L* Z

! S4 E9 C) I5 C) O, K
2 e0 ~: Y; o% F' p

# r: R$ z8 o2 ^
[backcolor=rgba(18, 18, 18, 0.5)]​. Q7 a9 c; v. G; A6 t( S

3 Z/ y: ~9 T  X& u
* e7 i/ `6 c, m( u9 g7 K
5 M7 G3 j  `" _  Y5 N. A

! k# \; }% H# X编辑切换为居中: X6 G3 r0 S- x: C. }6 t" G1 |
+ q2 u/ n! E- D1 @/ q4 B; ?& g

' g) F5 l4 x, }1 j+ K0 K" o8 T# F) X; p! Q5 h0 G

+ a' v  K( y+ F$ n添加图片注释,不超过 140 字(可选)! q8 k$ E  I* y; Y

: r  u5 G9 ^% @2 K9 L! L- B( Z) w1 d- U4 X& H# n) E

& O( z, y, o  E9 I* m  W- R3 u2 K

; A5 Y1 `& i( l( ^+ a# J" IStep 2:
/ b* j; H/ M+ N
依次点击【工具→选项→构建和运行】
: F9 C$ M( |- K
: a& q2 h& y; ~* x% k
再点击Kit,添加一个新的配置,名称自拟即可,设备类型选择【通用Linux设备】,调试器选择刚刚创建好的Debuggers即可。
% G6 b7 F5 R) b' @, K

7 ~" J/ \1 ]: J
5 T$ r! E' s4 M: U. N/ M: \# \) J2 R$ u' ?+ C) k% `$ o
) a  [5 M6 J! d
[backcolor=rgba(18, 18, 18, 0.5)]​
' P! @0 X  g' ~; e0 v' X, f: Y/ ]. G: F

" d$ O& c: o3 r6 D6 D( L2 ]
7 U- s- v9 }( J9 T: A9 c, }+ t% O1 {  I. y
编辑切换为居中$ b' I2 X# H  S" w& y

' v0 L- H" p. }/ Z  V$ p( Z. N4 @( D8 f0 F$ d  l5 Y) w1 z* D0 A
' c- Y9 f8 O; W' X
  r9 [; u: V/ t( v  f& J1 I
添加图片注释,不超过 140 字(可选)6 {. w6 d) ~/ Y' ^: p/ J" K" }) ?4 b

; D3 T% g1 U7 Q4 D& m( }2 G% X% s, m1 s0 H% a. C

/ P) \% {+ Q! [9 }6 R

1 z& Y! ?/ u. \& S7 cStep 3:
( A% f9 x5 h( L% H5 d
点击【工具→选项】  K: a5 ]. b; f8 V$ |

1 |$ a  L# o; W在最左侧选项里选择【设备】,进入【设备】界面后点击Add,添加GenericLinux Device(default for GenericLinux)设备,输入开发板的网络IP以及SSH登录的用户名和密码,再点击Test进行测试,验证连接后配置完成。$ B# x9 H5 R- T4 K( n
& e. K( m' E% a1 P, p

8 x* ~# F1 g, J  `, z* c; r( x! _3 W8 t9 Y4 s6 w# A
* q5 h7 T; j9 U2 X( o6 ~
[backcolor=rgba(18, 18, 18, 0.5)]​
/ m! ^8 ]" @7 Y8 K, K
; u+ D) ^5 u7 F

; k) s9 E# k7 j) h. g: F
1 i0 Y' R4 \! B* k5 `) B) }
* n9 N/ A4 l2 t  g编辑切换为居中. S& o' u: x) x1 r$ ~. {, g

2 _, E. g" l' i. I: x4 Z; L) b$ |# }" S/ b/ f) u* y
8 h3 h4 j2 r; X6 p' W8 m& j- l  c

# Z' u; j# k# f8 Y8 t添加图片注释,不超过 140 字(可选)5 y" Y- C+ g3 g% h; c

  w# d; p' a2 u$ m" f
1 i/ ]5 c* `+ z; l: ?7 `5 q0 I5 _/ `% [0 V1 P

, {" h0 |" P# K7 l5 C: {
0 `. A0 i& g1 B& ^$ U0 L
' |( s% x' X2 e7 j2 K, w3 |

2 S. ], Q9 P: M: ]
[backcolor=rgba(18, 18, 18, 0.5)]​
9 ?( s7 f( v9 L6 @  E5 B& a% [# {6 N. d8 o% l
, j6 a; R6 x( l0 t' i1 H4 S

% T! V& O+ ?3 C/ q# \
$ h) H+ o" C* q  j2 H编辑切换为居中: B6 Y2 R, [) p8 I3 v

% J6 l' @' S; r, T9 U7 V9 P) H
0 G) `# R" b* C# v$ `) a' ^' @- g6 S- b8 d5 t7 U. B

; k" a( [# z4 v* Y. i添加图片注释,不超过 140 字(可选)2 P7 l9 y7 p6 L. F$ P

& k$ t" v, R; P1 p9 p$ J! ~# O% r9 o

7 |% Z9 S6 l% L* R2 t

/ J2 |0 T' G2 x8 Y到这一步,可能会有朋友要问了——“该如何配置OKT3-C开发板的SSH呢?”小编来为大家简单地介绍一下:
1 H: R* B# }& c! |% }

" X3 }) e. q& X- ?/ i5 X0 R1.设置账号密码:adduser+账号passwd+密码+ }- u& ?+ ?3 c) Z( [2 Z4 F

$ t! j7 J! F) ^3 v3 |# V. v- a- }2.修改配置文件:/etc/ssh/sshd_config将#PermitRootLoginprohibit-password 修改为PermitRootLogin yes,保存退出4 @5 z% u0 {- M4 M
, [1 Y5 A. A4 i
3.重启 SSHD:输入命令 /etc/init.d/S50sshdrestart ,重启SSHD服务; Z/ u" G% a7 s, H, E3 w

1 i( S, `2 _' [3 O4.设置要修改的IP地址:输入命令:ifconfig eth0 +IP
5 y( M  I. U8 f( J* }/ q8 @
2 V9 y, F& O, `: z4 F
Step 4:, ]1 J, s6 k2 ~6 J- G
指定目标文件路径
: u5 L! M* O% q' b5 B' y5 l$ n5 `  d

# Z5 m- G' m! j/ o/ H2 q/ v在项目这个地方选择的存放路径要在.pro文件中声明。; |2 ]' k  o( i; k. ]

* L6 U( D9 e; w' N) ^$ S& R9 V) g5 ^8 t. ^3 v; w$ Z( Q

' e# i1 F3 `5 n

" a* c3 D, W* Y6 p+ \5 q! I5 _
[backcolor=rgba(18, 18, 18, 0.5)]​# S% p6 G& _# J% X9 I

) s& h1 \0 [/ K8 q! x" z

& ~- a, o9 I9 J5 h, k1 }. y3 ?2 t3 h& y# r4 @
6 |% l" A' G- L, l4 S$ k1 A
编辑切换为居中
2 Q' K+ ]* i- X. c" K( J; ^$ {& [* R. A3 k1 H1 u' v5 L7 |
: Y' w, v# y2 }2 \; J, F4 C

7 ?6 c$ R$ y9 A* h1 _$ N' S
. m( g4 J* X$ w' g1 w添加图片注释,不超过 140 字(可选)' ?2 |0 L, B& P" y9 _. D; e1 l

2 Z) H5 o0 z9 Q+ L0 r4 k8 G# O6 Z+ ]  G. {
* i) \8 _/ J( K9 N! |8 ~
; _. [4 ^4 ]) [7 H+ ~1 ^- L$ E: o

+ n! ^/ ~* H5 s2 f* B
  ~. o' L( X3 z
8 m6 ^  |& M3 U) P; K' T0 ^& O
[backcolor=rgba(18, 18, 18, 0.5)]​
1 E4 J- z, b  G: ^( A- H  ]8 Y) Y+ H' ?; B/ ~! _1 v

, M/ H* Q) t6 B. Q3 {- {+ H! E2 Z/ @2 m
; Q! @  ~6 V0 [6 ^0 E
编辑切换为居中
6 }: u% {0 L3 e3 p- G2 `+ a
3 Z- o6 ?8 K& K: k1 Q
( K9 |4 D, |1 L3 U$ Z2 z( y' B2 n5 F4 F4 @" s8 c
. g& a8 J8 `( g4 _2 ^, x- J
添加图片注释,不超过 140 字(可选)
( m/ _( e, |  x+ A: f
( W8 @2 A) y: A% N% t2 r- r& I( n0 D6 f! k7 I

* d% B0 {+ L. O2 B/ b
7 H1 h7 Q( S! [$ ]
9 W2 j: ]' q# V8 j7 ]
- t0 H- k$ {: {7 s7 H8 q/ A

9 x1 o0 U$ ?% W: Q* R5 V: p; C二、成果展示
: x( S0 l% F: ?& u1 Q' h3 o0 ?
按步骤完成以上操作后,我们一起来看最后的成果吧。我们简单搭建一个界面,作为测试使用。  F- n8 N7 U! Z) B& U
4 ~7 p2 R/ g0 g

1 i% Z# J+ [! o" }: }; z; y
% w$ `( }$ u/ E- y( {) u

( C' `3 M8 Q4 o! q6 X2 H
[backcolor=rgba(18, 18, 18, 0.5)]​6 g9 N; w6 a- X- p, Q: R$ U" {( i

4 x) A: l1 c7 a' G; Z! v, h

! I8 o7 o) I9 P" M' }4 Y* D  j
4 m# v9 W# P2 e
0 _& V) H, e& u, M1 |3 w3 c编辑切换为居中
) U  ]$ \* ~3 ]3 b2 I
: \4 M- A/ P0 O4 n. ]
/ o  L9 B. e9 P6 q: n
; J1 l, G9 m7 e. P2 m, q9 y" w/ U8 H: W6 F( R* B
添加图片注释,不超过 140 字(可选)' f. T& E2 U7 t" K8 k* @
8 t7 @5 C/ y5 r
" b- V3 L9 h( O8 @4 k

$ g1 I6 F- U, |1 e" \4 M+ h
% w; m7 E- l9 S7 d2 g2 \
屏幕显示:
1 F% n- i5 U- q! B, J
4 G1 g1 L- W$ k* m! ]
! k3 _1 @$ g& T) ]
0 U" Z7 m( W4 d3 Q
; F0 X5 \# ~. Z6 z7 j# ~
[backcolor=rgba(18, 18, 18, 0.5)]​
& L( Y- z# I- O" B, A
3 N6 O* p: Z. S9 y0 y) ]' v* u& v# t

3 p! W" t& m4 T* n! L  D: m) d; K) V8 {+ Y' f, Q$ j# p5 B

* Y5 {! i: X7 t: w9 s  _# L0 `! r编辑切换为居中/ i9 w1 F. |9 Z& i
- Y8 N( Q' M7 Y
" Z+ y8 j9 [2 y5 T

8 G  [0 ~" B& N- ?3 L
8 G0 n4 M. T' N5 x5 W! f  K添加图片注释,不超过 140 字(可选)
; ~/ g! m* E8 K& f# n# F7 U& n7 h
! P" `) F4 D( q$ e9 X2 V9 S! Z: |( `, x$ A2 I- T2 x) ], Y  t
: x# C9 \$ B& K+ e2 _
8 x: P# X2 ]) h+ N
模拟研发人员进行增删:" X$ s; ]3 o9 f- E4 |% \$ }, N
" o+ R' w9 j! z! ~
4 _8 d5 [# c6 y) G6 E- N3 j' h
/ l  c( r  A) t3 d
0 T" M* N  Y) d  i$ [! k+ f
[backcolor=rgba(18, 18, 18, 0.5)]​
5 L2 U4 R! ^8 |3 a" x9 j/ w" x, g# _2 `. J
4 l0 B& G7 ?! M. l
* X- |! u; d8 }& Z' ]! k& v. D. b

6 m$ o% d5 G' I* N9 M/ u编辑切换为居中
3 D, j0 F' |, ?0 i0 S% a/ N" @
6 Z& n6 o; f& `; Z  c4 W* B* d; S- O/ q" L. [% I

: g( d6 i& d$ I/ B* n3 K( G! B! G3 \" ^
; q4 b8 @5 X" |2 m) _1 u添加图片注释,不超过 140 字(可选)& c# T- P& y- ]5 Z$ I
* P) c+ W5 y, k% j3 z

5 [$ W4 R* p, s/ K+ o  k4 E. Z* u: F7 y$ Y1 T* s+ J

0 r- Z+ }1 p1 e7 l屏幕显示:: U6 m* i: t+ {! l2 H; A

9 W& ^6 k, A& P
( `+ d5 c# S5 K
( J! ~6 x( F% v1 R+ }

) H: T; g0 _% j: x8 n& e
[backcolor=rgba(18, 18, 18, 0.5)]​
# |# s- M( Q6 t) Y4 B. j8 L
& Y9 a" x' S) n1 E/ z
0 F! I, X( P6 ]  k- C! v

0 [8 I" ]0 `- E  S7 T6 _7 N+ `, X7 I2 R2 x. H3 L+ q" m9 q
编辑切换为居中
! z- Q/ T: Y: f- h2 x+ p. q& ^/ h! Y& Z! U# h$ O% q  Y* B

! j' p) S1 C- u7 Q( d: y8 ]0 [. a: U
3 w' b+ |" F  N' K8 w
添加图片注释,不超过 140 字(可选)
- g& u# U2 t6 w, x# h  _: p1 X  B0 d. H: o- B  t; I
9 v+ y+ q" O; {) W- b7 L- N: y

8 z% G9 q8 Z. i: a

7 x9 L5 A: O! R9 ?可以看到,我们在Qt工程中做出的修改已经成功的显示在屏幕上了,中间并不需要繁琐的编译烧写,一键运行就可以看到实时的修改,这大大减小了开发人员的工作量,提高了工作效率。
2 G3 R' o0 i# f4 o, x, ?

* C9 p+ D. ]2 X, c6 ]三、经验分享 3 w+ r* q/ o. h/ h% B5 l
在进行Qt远程调试的过程中,小编将自己踩过的一些坑和大家分享一下,希望各位工程师小伙伴可以少走弯路。
" Z7 M# H8 g: ?" w1 t9 G4 y' f0 e

. t' s/ W  I; _0 u8 i1.“连接错误”问题; [- d2 W+ h+ ]. M- T
" n4 n7 X- m$ w& b6 |4 K8 D

9 X  X1 Q0 q6 ]8 x/ W* U# L8 j  O3 d. l8 D2 ~. y7 F  _. e3 a

  x1 X9 A# h* w5 A$ d: o) a. O
[backcolor=rgba(18, 18, 18, 0.5)]​
  Z" W( }4 B; R+ O+ B! Y1 p& G+ G
* a8 r: N! e9 |4 W6 D+ z0 y

, _" x9 @/ `/ w! k) v* n9 M7 i' \+ {) P2 n9 E  d
( Q. g- F% ~1 F" d. h
编辑
* o* g# k, _* z  s. ~2 U( n9 A
: q9 v# R8 l& A: K& D" M( \9 i* {' {) F; ?! p4 Z$ C
( K5 W+ x( n. t% t+ k9 f/ c
% O  J2 w7 j- C& Z- a
添加图片注释,不超过 140 字(可选)
6 d) d/ _1 L9 V1 l  q& F2 u: }. `0 V' ~: d2 l. t9 i

! s& J7 H5 s1 V
, c" o- |6 @: r, f. v3 G6 h
! P3 M1 `" y9 e% @# t# Y( W; C
2.“部署失败”问题
9 ^+ b1 }' J) e0 d( r; N
+ s2 a% U, o- T
- _+ R) }" w* Q! }9 K; ~  j- A
7 E) A8 M  {5 |" X/ ?% I
9 k: F/ x4 Y  T4 u. e0 s
[backcolor=rgba(18, 18, 18, 0.5)]​% c; W; q1 i; O  M; \/ N( D
6 _2 T1 N1 {7 C) u. G4 g' `: [. L
/ Y& ~/ a5 D# C/ G2 Y0 N1 N* ?

; r1 Q4 A% J; a; r( X$ S- Y1 ]6 M, \" N3 c! M* f
编辑切换为居中
5 L, k. ^/ Y8 W7 U
4 w# c' R# t! x, a+ `9 ?  _& L1 r5 I7 o5 l/ h, b9 q4 @$ G

* B  j! d1 G  u: Q9 R7 Q, a( I
) k8 d" F) D7 l6 U0 b6 n2 b添加图片注释,不超过 140 字(可选)
) g- ^- T7 h- ]9 d8 B+ ?
' u: c, m% S6 Z- y
. Y$ _+ F5 `5 z9 M" h
4 T' ^7 A# I) Z9 P
8 P% G- o# w0 S5 t0 T  ^
出现上图提示问题的原因是,在OKT3-C开发板上已经运行了一个程序,此时再运行一个新的程序就会部署失败。这时,只需要在开发板上杀掉该进程,就可以正确运行Qt程序。$ u% I: V* h4 D8 K- L; _

4 d8 L  n/ S3 A  L2 x% K) F- ~7 V  e: u+ J6 h/ z0 K

8 T& {- `) T. Z% V2 d  q: y
0 }# ?9 T& y1 r" r4 [& h2 Y
[backcolor=rgba(18, 18, 18, 0.5)]​
, ^! H" G/ b; Z8 s  V1 R( b4 s& O6 w" j( I
7 X7 p, M9 m8 b& ~' Q
. E2 c/ G) ]0 s% L- L& M! c: W
7 `; X& R0 j% u% J3 }
编辑切换为居中% Z' t5 C4 s  A4 L" |+ Q0 \

$ Z$ n+ J9 e+ p. E* P5 h* ^* L1 w& o( D3 ?  ], F5 V

! }& b9 {( W5 b
7 L0 O# k- P" D$ \7 n% x添加图片注释,不超过 140 字(可选)  s: n' }. _4 n6 H
0 h+ z5 y3 b9 t" t' H1 ?6 L  T

* z; V1 g$ m6 j1 x- g& k' ^2 [  j& e6 m/ m  b

! y; p# i1 \8 s' X/ z+ [四、总结
1 b4 Z( [* i% E
% I8 p8 e: _3 |1 i0 k

& j4 ~, h: e, J) i
6 M  i; Z7 L2 {# G- w3 c
; J  T0 }9 ~: J# m' q

* a& F- z8 {1 I6 _( s
, a; e) M& w7 a

0 c$ B" {9 u+ q, O( s; I总结一下——通过配置虚拟机中的Qt应用程序、虚拟机网络IP,通过gdb调试和ssh服务,实现在虚拟机中编写Qt程序后,再点击绿色三角形的运行按钮,,即可在开发板中安装运行对应的Qt程序。
. I' ~+ E  `* ?

4 |5 ^; I9 M+ i, W
) ]' \  ?1 _; t5 D# d9 V# w
4 w2 r' R7 ]6 Y( P; \, ~

, U3 J$ z6 T1 u# _3 O以上就是小编为大家整理的快速进行Qt远程调试的过程以及一些问题产生的原因,希望能够对大家有帮助。% X0 S# ~0 ^' V4 \9 V' i. \

4 `2 L( c4 A  x
; c' Q2 h6 F% y+ n4 f' Y- u! `
作者: dream123    时间: 2022-9-30 17:37
用这种命令进行远程调试,一个命令符用一行打完不要换行否则就会失效




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2