関数へステップインしてくれない
CLionという開発環境を使用してC言語のソースコードを見ているのですが、mainからステップ実行していき、関数にさしかかった所でステップインしてその関数内での動きを見たいと考えました。
ブレークポイントを貼り、F8でステップオーバーしてカーソルを進めて、関数のところでF7ボタンを押し、関数の中身をステップ実行して行きたいと考えていますが、関数に差し掛かったところで、LKH(disassembly)というアセンブリ?のソースコードへ飛んでいってしまいます。
C言語に疎く良くわかっていないのですが、このようにステップ実行がすべての行追いかけてくれないことはC言語ではあるのでしょうか?
関数内へステップインしない原因が分かれば教えていただきたいです。
試したこと
コンパイルに最適化オプションがあることを知りました。
はじめ、CFLAGSの-Oが-3Oだったですが、最適化の影響で突然アセンブラのコードへ飛んでいってしまっているのかと思い、-Oへ変更してみましたが変化はありませんでした。
CLionはCMakeに対応しており、デバッグがMakefileのみでは出来なかったため、デバッグ用にCMakeList.txtを作りました。実行ファイルの場所を明示するためにCMakeList.txtは自作で作りました。その他は元から有るコードです。
環境
OS:Linux18.04.1 LTS
開発環境:CLion
LKH(disassembly)
C
1! [0x0000000000000000..0x000055959668a23f]: 2! not disassembled yet 3 4! [0x000055959668a240..0x000055959668a53f]: 5 push %rbp ! 0x000055959668a240 6 push %rbx ! 0x000055959668a241 7 sub $0x18,%rsp ! 0x000055959668a242 8 callq 0x55959668ec40 # <GetTime> ! 0x000055959668a246 9 mov 0x22d456(%rip),%rdx # 0x5595968b76a8 <FirstNode> ! 0x000055959668a24b 10 movsd %xmm0,(%rsp) ! 0x000055959668a252 11 mov %rdx,%rax ! 0x000055959668a257 12 nopw 0x0(%rax,%rax,1) ! 0x000055959668a25a 13 movq $0x0,0x68(%rax) ! 0x000055959668a260 14 movq $0x0,0x70(%rax) ! 0x000055959668a268 15 movq $0x0,0x60(%rax) ! 0x000055959668a270 16 movq $0x0,0x58(%rax) ! 0x000055959668a278 17 mov 0x50(%rax),%rax ! 0x000055959668a280 18 cmp %rax,%rdx ! 0x000055959668a284 19 jne 0x55959668a260 # <FindTour+32> ! 0x000055959668a287 20 mov 0x22d155(%rip),%ebp # 0x5595968b73e4 <Run> ! 0x000055959668a289 21 cmp $0x1,%ebp ! 0x000055959668a28f 22 je 0x55959668a9a0 # <FindTour+1888> ! 0x000055959668a292 23 mov 0x22d249(%rip),%r8d # 0x5595968b74e8 <MaxTrials> ! 0x000055959668a298 24 movabs $0x7fffffffffffffff,%rax ! 0x000055959668a29f 25 mov %rax,0x22d1a0(%rip) # 0x5595968b7450 <BetterCost> ! 0x000055959668a2a9 26 test %r8d,%r8d ! 0x000055959668a2b0 27 jle 0x55959668a988 # <FindTour+1864> ! 0x000055959668a2b3 28 mov 0x22d2e0(%rip),%rdi # 0x5595968b75a0 <HTable> ! 0x000055959668a2b9 29 callq 0x55959668fd80 # <HashInitialize> ! 0x000055959668a2c0 30 mov 0x22d21d(%rip),%ecx # 0x5595968b74e8 <MaxTrials> ! 0x000055959668a2c5 31 movl $0x1,0x22d2e3(%rip) # 0x5595968b75b8 <Trial> ! 0x000055959668a2cb 32 test %ecx,%ecx ! 0x000055959668a2d5 33 jle 0x55959668aa98 # <FindTour+2136> ! 0x000055959668a2d7 34 nopl (%rax) ! 0x000055959668a2dd 35 36 mov %r8d,0x22d084(%rip) # 0x5595968b753c <Hash> ! 0x000055959668a4b1 37 jne 0x55959668a490 # <FindTour+592> ! 0x000055959668a4b8 38 cmp %ecx,%esi ! 0x000055959668a4ba 39 jle 0x55959668a4c4 # <FindTour+644> ! 0x000055959668a4bc 40 mov %ecx,0x22d0f4(%rip) # 0x5595968b75b8 <Trial> ! 0x000055959668a4be 41 callq 0x55959669e6e0 # <ResetCandidateSet> ! 0x000055959668a4c4 42 mov 0x22cf80(%rip),%rax # 0x5595968b7450 <BetterCost> ! 0x000055959668a4c9 43 add $0x18,%rsp ! 0x000055959668a4d0 44 pop %rbx ! 0x000055959668a4d4 45 pop %rbp ! 0x000055959668a4d5 46 retq ! 0x000055959668a4d6 47 nopw 0x0(%rax,%rax,1) ! 0x000055959668a4d7 48 mov 0x22cc89(%rip),%rsi # 0x5595968b7170 <OrdinalTourCost> ! 0x000055959668a4e0 49 cmp %rbx,%rsi ! 0x000055959668a4e7 50 jg 0x55959668a38e # <FindTour+334> ! 0x000055959668a4ea 51 cmp %rdx,%rsi ! 0x000055959668a4f0 52 mov 0x22cfb7(%rip),%ecx # 0x5595968b74b0 <TraceLevel> ! 0x000055959668a4f3 53 jl 0x55959668a748 # <FindTour+1288> ! 0x000055959668a4f9 54 cmp $0x1,%ecx ! 0x000055959668a4ff 55 jle 0x55959668a407 # <FindTour+455> ! 0x000055959668a502 56 callq 0x55959668ec40 # <GetTime> ! 0x000055959668a508 57 subsd (%rsp),%xmm0 ! 0x000055959668a50d 58 mov 0x22d0a0(%rip),%esi # 0x5595968b75b8 <Trial> ! 0x000055959668a512 59 lea 0x23a89(%rip),%rdi # 0x5595966adfa8 ! 0x000055959668a518 60 mov %rbx,%rdx ! 0x000055959668a51f 61 mov $0x1,%eax ! 0x000055959668a522 62 andpd 0x230b1(%rip),%xmm0 # 0x5595966ad5e0 ! 0x000055959668a527 63 callq 0x5595966958e0 # <printff> ! 0x000055959668a52f 64 jmpq 0x55959668a407 # <FindTour+455> ! 0x000055959668a534 65 nopl 0x0(%rax) ! 0x000055959668a539 66 67! [0x000055959668a540..0xffffffffffffffff]: 68! not disassembled yet
Makefile
TREE_TYPE = TWO_LEVEL_TREE # TREE_TYPE = THREE_LEVEL_TREE # TREE_TYPE = ONE_LEVEL_TREE # CC = gcc IDIR = INCLUDE ODIR = OBJ CFLAGS = -O -Wall -I$(IDIR) -D$(TREE_TYPE) -g _DEPS = Delaunay.h GainType.h Genetic.h GeoConversion.h Hashing.h \ Heap.h LKH.h Segment.h Sequence.h gpx.h DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) _OBJ = Activate.o AddCandidate.o AddExtraCandidates.o \ AddTourCandidates.o AdjustCandidateSet.o AdjustClusters.o \ AllocateStructures.o Ascent.o \ Best2OptMove.o Best3OptMove.o Best4OptMove.o Best5OptMove.o \ BestKOptMove.o Between.o Between_SL.o Between_SSL.o \ BridgeGain.o BuildKDTree.o C.o CandidateReport.o \ ChooseInitialTour.o Connect.o CreateCandidateSet.o \ CreateDelaunayCandidateSet.o CreateNNCandidateSet.o \ Create_POPMUSIC_CandidateSet.o CreateQuadrantCandidateSet.o \ Delaunay.o Distance.o Distance_SPECIAL.o eprintf.o ERXT.o \ Excludable.o Exclude.o FindTour.o FixedOrCommonCandidates.o \ Flip.o Flip_SL.o Flip_SSL.o Forbidden.o FreeStructures.o \ fscanint.o Gain23.o GenerateCandidates.o Genetic.o \ GeoConversion.o GetTime.o GreedyTour.o Hashing.o Heap.o \ IsBackboneCandidate.o IsCandidate.o IsCommonEdge.o \ IsPossibleCandidate.o KSwapKick.o LinKernighan.o LKHmain.o \ Make2OptMove.o Make3OptMove.o Make4OptMove.o Make5OptMove.o \ MakeKOptMove.o MergeTourWithBestTour.o MergeWithTourIPT.o \ Minimum1TreeCost.o MinimumSpanningTree.o NormalizeNodeList.o \ NormalizeSegmentList.o OrderCandidateSet.o PatchCycles.o \ printff.o PrintParameters.o \ Random.o ReadCandidates.o ReadEdges.o ReadLine.o \ ReadParameters.o ReadPenalties.o ReadProblem.o RecordBestTour.o \ RecordBetterTour.o RemoveFirstActive.o \ ResetCandidateSet.o RestoreTour.o SegmentSize.o Sequence.o \ SFCTour.o SolveCompressedSubproblem.o \ SolveDelaunaySubproblems.o SolveKarpSubproblems.o \ SolveKCenterSubproblems.o SolveKMeansSubproblems.o \ SolveRoheSubproblems.o SolveSFCSubproblems.o SolveSubproblem.o \ SolveSubproblemBorderProblems.o SolveTourSegmentSubproblems.o \ Statistics.o StoreTour.o SymmetrizeCandidateSet.o \ TrimCandidateSet.o WriteCandidates.o WritePenalties.o \ WriteTour.o MergeWithTourGPX2.o gpx.o OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) $(ODIR)/%.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) .PHONY: all clean all: $(MAKE) LKH LKH: $(OBJ) $(DEPS) $(CC) -o ../LKH $(OBJ) $(CFLAGS) -lm clean: /bin/rm -f $(ODIR)/*.o ../LKH *~ ._* $(IDIR)/*~ $(IDIR)/._*
CMakeList.txt
C
1cmake_minimum_required(VERSION 2.8.4) 2 3set(SOURCE_DIR "/home/wataru/workspace/LKH-2.0.9") 4set(PROJECT_BINARY_DIR "/home/wataru/workspace/LKH-2.0.9") 5 6set(IDIR "INCLUDE") 7set(TREE_TYPE "TWO_LEVEL_TREE") 8set(CMAKE_C_FLAGS "-O -Wall -I${IDIR} -D${TREE_TYPE} -g" ) 9 10# set project name 11project(LKH) 12 13add_custom_target(LKH COMMAND make -C ${SOURCE_DIR} CLION_EXE_DIR=${PROJECT_BINARY_DIR})
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/25 11:06